首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

让两个表匹配的有关问题

2013-12-11 
让两个表匹配的问题本帖最后由 caozhy 于 2013-12-10 18:14:07 编辑请教 一个问题我有两个 dt 结构 一样

让两个表匹配的问题
本帖最后由 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();
        }

热点排行