c# - SQL Linq 与多列相交

标签 c# linq

我有 2 个列表

A = 74137 records (7 columns)
B = 63029 records (5 columns)

并想找到所有有

的记录
A.column1 = B.column1 and A.column2 = B.column2 and A.column3 = B.column3

但想返回 A 的全部 7 列。 到目前为止,我试过这段代码:

var ListCucolumn3uriPostale = (from A in _TempListaAdreseInProcesare.AsParallel()
                                           join B in tblcolumn3uri.AsParallel()
                                           on
                                           new { column1 = A.column1.ToUpper(), column2 = A.column2.ToUpper(), column3 = A.column3 }
                                           equals
                                           new { column1 = B.column1.ToUpper(), column2 = B.column2.ToUpper(), column3 = B.column3 }
                                           select new TempSpecificatii
                                            {
                                                column0 = A.column0,
                                                column4 = A.column4,
                                                column1 = B.column1,
                                                column2 = B.column2,
                                                column3 = B.column3,
                                                column5 = B.column5,
                                                column6 = B.column4,
                                                column7 = A.column7,
                                                column8 = A.column8,
                                                column9 = A.column9,
                                                column10 = A.column10
                                            }).ToList();

但是我得到了一个包含 186395 条记录的列表,那是不正常的。我像这样更改了代码:

var listacucoduripostale = (from A in _TempListaAdreseInProcesare.AsParallel()
                            select new
                            {
                                column1 = A.column1.ToUpper(), column2 = A.column2.ToUpper(), column3 = A.column3
                            }).Intersect(
                           from B in tblCoduri.AsParallel()
                           select new
                           {
                               column1 = B.column1.ToUpper(), column2 = B.column2.ToUpper(), column3 = B.column3
                           }).ToList();

我得到了 23567 条记录的良好结果,但列表中只有 3 列,我想要 A 中的所有列。我必须更改什么才能获得所需的结果。 谢谢。

最佳答案

我很想这样做,HashSet 应该提供快速查找。

var bLookupSet = new HashSet(b.Select(b =>
                   new { 
                       Column1 = b.Column1, 
                       Column2 = b.Column2,
                       Column3 = b.Column3
                       }));

var resultList = a.Where(a => bLookupSet.Contains(
                   new { 
                       Column1 = a.Column1, 
                       Column2 = a.Column2,
                       Column3 = a.Column3
                       })).ToList();

如果您需要匹配不区分大小写,并且所有 3 列都是字符串,那么我会这样做,

var bLookupSet = new HashSet(b.Select(b =>
                   new { 
                       Column1 = b.Column1.ToLower(), 
                       Column2 = b.Column2.ToLower(),
                       Column3 = b.Column3.ToLower()
                       }));

var resultList = a.Where(a => bLookupSet.Contains(
                   new { 
                       Column1 = a.Column1.ToLower(), 
                       Column2 = a.Column2.ToLower(),
                       Column3 = a.Column3.ToLower()
                       })).ToList();

关于c# - SQL Linq 与多列相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636662/

相关文章:

sql - 使用 LINQ-to-Entities 的 OrderBy 和 Distinct

c# - 如何使用 Linq 对 Web 服务进行单元测试

c# - 使用 LINQ 选择最频繁的值

c# - 使用哪种方式使用 azure 函数将消息发送到主题?

c# - 将 Texture2D 转换为 OpenCV Mat?

c# - 有人可以解释这段 MVVM 代码吗

c# - Linq 按文件名上的数字排序

C# DateTime.Parse 忽略 CultureInfo

c# - 多个单例实例 c#

c# - DistinctBy 不被识别为方法