【问题标题】:C# Linq Table query to count the non-matching entriesC# Linq 表查询以计算不匹配的条目
【发布时间】:2018-10-01 14:35:48
【问题描述】:

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

我正在对DataTable1 应用一些 linq 标准并从中创建另一个数据表,即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。我想在 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();

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

    您正在创建一个笛卡尔连接并计算其结果,这是您缩进的吗?同样在您的 linq 中,您的 Join 表达式和 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)会容易得多。

    【讨论】:

    • 上述工作是啊,重写代码做Direct Linq to sql。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多