我想使用LINQ
根据属性比较两个对象列表。我创建了一个对象列表,另一个列表存储在数据库中。
课程如下:
class A
{
int a1;
int a2;
}
class B
{
int b1;
int b2;
}
我正在使用条件List<A> a
或List<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查询。
答案 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});