比较LINQ的where子句中的两个对象列表

时间:2015-04-11 05:41:48

标签: c# linq linq-to-sql

我想使用LINQ根据属性比较两个对象列表。我创建了一个对象列表,另一个列表存储在数据库中。 课程如下:

class A
{
    int a1;
    int a2;
} 
class B
{
    int b1;
    int b2;
}

我正在使用条件List<A> aList<B> b(a1==b1 and a2==b2)(a1==b2 and a2==b1)进行比较。如果任何条件为真,则返回属性为List<C>的第三个class A。 以下是我正在使用的LINQ:

(from a in context.A
                 where b.Any(m => (m.b1 == a.a1 && m.b2 == a.a2) || (m.b1 == a.a2 && m.b2 == a.a1))
                 select new C
                 {
                     c1 = a.a1,
                     c2 = a.a2,
                 }).ToList();

但它抛出一个错误:

  

本地序列不能用于查询的LINQ to SQL实现   除Contains运算符之外的运算符

请帮我弄清楚正确的Linq查询。

2 个答案:

答案 0 :(得分:2)

试试这个:

(
    from a in context.A.ToArray()
    where b.Any(m => (m.b1 == a.a1 && m.b2 == a.a2) || (m.b1 == a.a2 && m.b2 == a.a1))
    select new C
    {
        c1 = a.a1,
        c2 = a.a2,
    }
).ToList();

这会带来A本地版本,然后您可以使用b本地广告。

当然,这仅在A小到足以在内存中完全加载时才有效。

答案 1 :(得分:1)

试试这个

context.A.Where(a=>b.Any(m => (m.b1 == a.a1 && m.b2 == a.a2) || (m.b1 == a.a2 && m.b2 == a.a1))).select(a=> new C{ c1 = a.a1,
                     c2 = a.a2});