C# Linq Table 查询以计算不匹配的条目
C# Linq Table query to count the non-matching entries
我对此很陌生,我 运行 有两个 SQL 查询,我正在创建两个单独的数据 tables、DataTable1
和 DataTable2
.
我正在将一些 linq 标准应用到 DataTable1
并从中创建另一个数据 table,即 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()
现在我将编写另一个查询来执行以下操作。
两个数据 table 都有一列 JobNumber
。我想查询 DataTable 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)会容易得多。
我对此很陌生,我 运行 有两个 SQL 查询,我正在创建两个单独的数据 tables、DataTable1
和 DataTable2
.
我正在将一些 linq 标准应用到 DataTable1
并从中创建另一个数据 table,即 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()
现在我将编写另一个查询来执行以下操作。
两个数据 table 都有一列 JobNumber
。我想查询 DataTable 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)会容易得多。