C#Linq表查询以计数不匹配的条目

时间:2018-10-01 14:35:49

标签: c# linq linq-to-sql

对此我很陌生,我正在运行两个SQL查询,并且正在创建两个单独的数据表DataTable1DataTable2

我正在将一些linq条件应用于DataTable1,并从中创建另一个数据表,即DataTable3

var Query3 = from table1 in DataTable1.AsEnumerable()
             where table1.Field<DateTime>("DateTime") <= Yday
             where table1.Field<string>("StockCode").Contains("-CA") && !(table1.Field<string>("StockCode").Contains("-CAB")) ||
                   table1.Field<string>("StockCode").Contains("-CM") ||
                   table1.Field<string>("StockCode").Contains("-LP")
             select table1;      

DataTable DataTable3 = Query3.CopyToDataTable()

现在,我将编写另一个查询来执行以下操作。

两个数据表都有一列JobNumber。我想在数据表2中查询DataTable3,以计算具有相似JobNumber条目的行。下面是我在做什么,但我没有得到正确的计数。

int count = (from table3 in DataTable3.AsEnumerable()
             join table2 in DataTable2.AsEnumerable() on table2.Field<string>("JobNumber") equals table3.Field<string>("JobNumber")
             where table2.Field<string>("JobNumber") == table3.Field<string>("JobNumber")
             select table2).Count();

1 个答案:

答案 0 :(得分:2)

您正在创建笛卡尔连接并计算其结果,这是您缩进的内容吗?同样在您的linq中,Join表达式和其中的表达式是相同的(哪里是多余的)。目前尚不清楚您真正想算什么。可能您想统计一下DataTable2中JobNumbers存在于DataTable3中的那些数据?:

var jobNumbers = (from r in DataTable3.AsEnumerable()
                 select r.Field<string>("JobNumber")).ToList();
var count = (from r in DataTable2.AsEnumerable()
             where jobNumbers.Contains( r.Field<string>("JobNumber") )
             select r).Count();

请注意,如果您改用Linq To SQL(而不是Linq To DataSet),则会容易得多。