【发布时间】:2017-02-10 17:26:58
【问题描述】:
我在 C# 中使用 .NET 4.5,并且我有两个不同类的集合,我试图比较它们。它们有一些名称相似的列,但它们没有实现通用接口(出于编码标准的原因也不能实现)。
第一个类是这样的:
class Foo
{
string Key1 {get; set;}
string Key2 {get; set;}
string NotKey {get; set;}
string AlsoNotKey {get; set;}
}
第二个看起来像这样:
class Bar
{
string Key1 {get; set;}
string Key2 {get; set;}
}
我想要做的是将Foo 的集合传递给一个方法并返回true,当其中的每对不同的Key1 和Key2 在从以下位置检索到的Bar 集合中匹配时一个数据库(通过 EF),但我不知道该怎么做。
我的第一个想法看起来像这样......
//IEnumerable<Foo> foos
//DbSet<Bar> bars
foos.All(foo => foo.Key1 == bars.Key1 && foo.Key2 == bars.Key2)
...但它不起作用,因为bars 也是一个集合,我不能只在每一列周围使用Contains(),因为这样它就不会将两列作为一对进行比较。
在 SQL 中,我可以做类似的事情
SELECT COUNT(*)
FROM foos
JOIN bars
ON foos.key1 = bars.key1
AND foos.key2 = bars.key2
并将其与 foos 中的记录数进行比较,但如何将其转换为 LINQ?
编辑:找到了这个相关的问题。 How to use linq `Except` with multiple properties with different class?
可能会尝试这样的事情,除非有更好的方法。
foos.All(f => bars.Any(b => f.Key1 == b.Key1 && f.Key2 == b.Key2))
【问题讨论】:
-
你试过LINQ's join吗?它可能完全符合您的要求。
-
您应该在 Linq to Entities 中编写一个 Join 查询。 msdn.microsoft.com/en-us/library/bb311040.aspxmsdn.microsoft.com/en-us/library/bb896266(v=vs.110).aspx
标签: c# .net entity-framework linq