C# linq 两个表,列名一样,但数据无关联,想合并为一个表

这个月太忙没时间看C++ 2017-06-19 11:07:54
我有两个集合分别是集合A1,A2,两个集合都只有两个字段o,p,怎么把这两个集合合为一个
我试过了A1.AsEnumerable().Union(A2)和Union()都不行
...全文
349 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
var result = from p in A1 from q in A2 where p.o!=q.o&&p.p!=q.p select new { o1=p.o, q1=p.q, o2=q.o, q2=q.q }
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
[quote=引用 2 楼 fsdad 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:]
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
这样虽然能查出来但是结果不太理想 有重复,没有什么方法能把第一个集合结果导入到第二个集合中么[/quote] 就算是导入也有重复,你把result去重就行了,使用Distinct 方法。 [/quote] 这种查询结果不对啊,我原来只有两个字段,这样查的话变成了一行四列,而且我第二个集合如果只有一行数据的话,查出来的结果中每行都有重复
exception92 2017-06-19
  • 打赏
  • 举报
回复
引用 2 楼 fsdad 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:]
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
这样虽然能查出来但是结果不太理想 有重复,没有什么方法能把第一个集合结果导入到第二个集合中么[/quote] 就算是导入也有重复,你把result去重就行了,使用Distinct 方法。
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
这样虽然能查出来但是结果不太理想 有重复,没有什么方法能把第一个集合结果导入到第二个集合中么
exception92 2017-06-19
  • 打赏
  • 举报
回复
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
正怒月神 2017-06-19
  • 打赏
  • 举报
回复
DataTable q = TestBLL.GetDt();
            DataTable q1 = TestBLL.GetDt();
            
            //不去重
            DataTable v = q.AsEnumerable().Union(q1.AsEnumerable()).CopyToDataTable();
            //去重 a,b,c列名
            DataTable v1 = q.AsEnumerable().Union(q1.AsEnumerable()).CopyToDataTable().DefaultView.ToTable(true, "a","b","c");
exception92 2017-06-19
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
[quote=引用 4 楼 fsdad 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] [quote=引用 2 楼 fsdad 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:]
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
这样虽然能查出来但是结果不太理想 有重复,没有什么方法能把第一个集合结果导入到第二个集合中么[/quote] 就算是导入也有重复,你把result去重就行了,使用Distinct 方法。 [/quote] 这种查询结果不对啊,我原来只有两个字段,这样查的话变成了一行四列,而且我第二个集合如果只有一行数据的话,查出来的结果中每行都有重复[/quote] Union的时候要传递一个实现IComarer接口的比较类,因为要比较数据的引用地址,不单单是数据的值。[/quote] sorry,应该是IEqualityComparer接口,类似(id,name2个属性,替换为你自己的):

public class  类名称Comparer : IEqualityComparer<类>
    {
        public bool Equals(类 x, 类 y)
        {
            if (Object.ReferenceEquals(x, y)) return true;

            return x != null && y != null && x.id.Equals(y.id) && x.name.Equals(y.name);
        }
        public int GetHashCode(Student obj)
        {
            int hashProductName = obj.id == null ? 0 : obj.id.GetHashCode();
            int hashProductCode = obj.name.GetHashCode();
            return hashProductName ^ hashProductCode;
        }
    }
Union的时候,类似:

x1.Union(x2, new 类名称Comparer ());
exception92 2017-06-19
  • 打赏
  • 举报
回复
引用 4 楼 fsdad 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] [quote=引用 2 楼 fsdad 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:]
var result = from p in A1
from q in A2
select new {
   o1=p.o,
   q1=p.q,
   o2=q.o,
   q2=q.q
}
这样虽然能查出来但是结果不太理想 有重复,没有什么方法能把第一个集合结果导入到第二个集合中么[/quote] 就算是导入也有重复,你把result去重就行了,使用Distinct 方法。 [/quote] 这种查询结果不对啊,我原来只有两个字段,这样查的话变成了一行四列,而且我第二个集合如果只有一行数据的话,查出来的结果中每行都有重复[/quote] Union的时候要传递一个实现IComarer接口的比较类,因为要比较数据的引用地址,不单单是数据的值。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧