C# Linq 表查询,用于计算不匹配的条目



我对此很陌生,我正在运行两个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();

您正在创建一个笛卡尔连接并计算其结果,这是您缩进的吗?同样在你的 linq 中,你的 Join 表达式和 where 表达式是相同的(where 是多余的(。目前尚不清楚您真正想要计算的内容。您可能还想计算 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(,那会容易得多。

相关内容

最新更新