如何比较linq和sql中的两个表?

如何比较linq和sql中的两个表?,linq,linq-to-sql,Linq,Linq To Sql,我试图比较linq到sql中的两个表(即值、计数等),但我没有找到实现它的方法。我试了以下方法 Table1.Any(i => i.itemNo == Table2.itemNo) 它给出了错误。你能帮帮我吗 提前谢谢。怎么样 var isDifferent = Table1.Zip(Table2, (j, k) => j.itemNo == k.itemMo).Any(m => !m); 编辑 如果Linq To Sql不支持Zip var one =

我试图比较linq到sql中的两个表(即值、计数等),但我没有找到实现它的方法。我试了以下方法

Table1.Any(i => i.itemNo == Table2.itemNo)
它给出了错误。你能帮帮我吗

提前谢谢。

怎么样

var isDifferent =
        Table1.Zip(Table2, (j, k) => j.itemNo == k.itemMo).Any(m => !m);

编辑

如果Linq To Sql不支持Zip

var one = Table1.ToList();
var two = Table2.ToList();

var isDifferent =
        one.Zip(two, (j, k) => j.itemNo == k.itemMo).Any(m => !m);
如果表变大,可能会导致性能问题。在这种情况下,您将需要一个更复杂的解决方案,如果是这样,请询问

EDIT2

如果表非常大,您不希望从服务器获取所有数据并将其保存在内存中。此外,除非您在查询中指定了顺序,否则Linq和SQL server不会调整行的顺序。这对于多处理器服务器返回的大型结果集尤其重要,因为并行性的影响可能会在其中发挥作用

我建议LINQtoSQL并不能很好地满足您的场景,所以您必须使用类似这样的东西来帮助解决这个问题

string zipQuery =
@"SELECT TOP 1
        1
    FROM
        [Table1] [one]
    WHERE
        NOT EXISTS (
           SELECT * FROM [Table2] [two] WHERE [two].[itemNo] = [one].[itemNo]
        )
UNION ALL
SELECT
        1
    FROM
        [Table2] [two]
    WHERE
        NOT EXISTS (
           SELECT * FROM [Table1] [one] WHERE [one].[itemNo] = [two].[itemNo]
        )
UNION ALL
SELECT 0";

var isDifferent = context.ExecuteQuery<int>(zipQuery).Single() == 1; 
var one = Table1.OrderBy(o => o.itemNo).ToList();
你也许应该考虑在名单上找一份订单,像这样。

string zipQuery =
@"SELECT TOP 1
        1
    FROM
        [Table1] [one]
    WHERE
        NOT EXISTS (
           SELECT * FROM [Table2] [two] WHERE [two].[itemNo] = [one].[itemNo]
        )
UNION ALL
SELECT
        1
    FROM
        [Table2] [two]
    WHERE
        NOT EXISTS (
           SELECT * FROM [Table1] [one] WHERE [one].[itemNo] = [two].[itemNo]
        )
UNION ALL
SELECT 0";

var isDifferent = context.ExecuteQuery<int>(zipQuery).Single() == 1; 
var one = Table1.OrderBy(o => o.itemNo).ToList();

严格地说,除非指定了顺序,否则Linq to Sql的结果将以任何顺序返回

我试图在布尔函数中实现它。基于比较,如果值或计数匹配,我想返回true或false。您到底在比较什么?表中的数据必须相同吗?是的,表中的数据必须相同,甚至行数也应该匹配。如何在if语句中使用它您的代码很好,但我不能在if语句中使用它根据结果返回true或false。上述语句的返回类型是布尔值,因此只需将
if
在它前面和一些括号中,在if语句中有它…实际上我在if语句中漏掉了“')。我得到了错误-NotSupportedException:不支持查询运算符“Zip”。