读书人

让两个表匹配的有关问题

发布时间: 2013-12-11 16:44:13 作者: rapoo

让两个表匹配的问题
本帖最后由 caozhy 于 2013-12-10 18:14:07 编辑 请教 一个问题
我有两个 dt 结构 一样 其实 他们 就是 一个 数据源 只不过 在赋值的时候 给 rowfilter了
其中 dt1 有 3 行数据 dt2 有 两行数据 他们 是 根据一个字段 CostName 来判断 这两行数据 是否一样
dt1数据
CostName CostType
打单费 0
港杂 0
商检 0

dt2 数据
CostName CostType
打单费 1
语录 1
商检 1
我想实现的效果
dt1数据
CostName CostType
打单费 0
港杂 0
商检 0
语录 0

dt2 数据
CostName CostType
打单费 1
语录 1
商检 1
港杂 1
求高手 解答

[解决办法]

引用:
请教 一个问题
我有两个 dt 结构 一样 其实 他们 就是 一个 数据源 只不过 在赋值的时候 给 rowfilter了
其中 dt1 有 3 行数据 dt2 有 两行数据 他们 是 根据一个字段 CostName 来判断 这两行数据 是否一样
dt1数据
CostName CostType
打单费 0
港杂 0
商检 0

dt2 数据
CostName CostType
打单费 1
语录 1
商检 1
我想实现的效果
dt1数据
CostName CostType
打单费 0
港杂 0
商检 0
语录 0

dt2 数据
CostName CostType
打单费 1
语录 1
商检 1
港杂 1
求高手 解答




create proc proc_DTTest
as
declare @Dt1CostName nvarchar(100),@Dt2CostName nvarchar(100),@i int
set @i = 100
while(@i < 0)
begin
--得到Dt1 的 CostName
select top 1 @Dt1CostName = CostName from Dt1 while Dt1ID not in
(
select top (1*(@i - 1) Dt1ID from Dt1)
)
--得到Dt2 的 CostName
select top 1 @Dt2CostName = CostName from Dt2 while Dt2ID not in
(
select top (1*(@i - 1) Dt1ID from Dt2)
)
if(@Dt1CostName = @Dt2CostName)
begin
--这里做你想要做的事儿
print '这里做你想要做的事儿'
end
else
begin
--这里做你想要做的事儿
print '这里做你想要做的事儿'
end
set @i = @i - 1
end


我按照我的意思写的端存储过程,不知道是不是你想要的答案。手写的,可能有错。
[解决办法]
现在附上标准代码:
    public static void dodt()
{
DataTable dt=new System.Data.DataTable();
dt.Columns.Add("CostName");
dt.Columns.Add("CostType");
DataTable dt1 = dt.Clone();


DataTable dt2 = dt.Clone();
DataTable newdt2 = dt.Clone();
DataTable newdt1 = dt.Clone();
dt1.Rows.Add("打单费", 0);
dt1.Rows.Add("语录", 0);
dt1.Rows.Add("港杂", 0);
dt2.Rows.Add("语录", 1);
dt2.Rows.Add("商检", 1);
///处理在dt1里面存在 dt2里面不存在的
foreach (DataRow item in dt1.Rows)
{

var query = dt2.AsEnumerable().Where(A => A.Field<string>("CostName").Equals(item[0].ToString())); //linq to data 查询CostName是不是已经存在
if (query.Count() <1)
{
newdt2.Rows.Add(item[0].ToString(), 0);
}

}
///处理在dt2里面存在 dt1里面不存在的
foreach (DataRow item in dt2.Rows)
{

var query = dt1.AsEnumerable().Where(A => A.Field<string>("CostName").Equals(item[0].ToString()));
if (query.Count() < 1)
{
newdt1.Rows.Add(item[0].ToString(), 0);
}

}
dt1.Merge(newdt1);
dt2.Merge(newdt2);
Console.ReadLine();
}

读书人网 >C#

热点推荐