我需要在Entity框架中查询对象集合,并找到符合参数列表的对象。例如,对象可以包含字段(p1,p2,p3,p4,.. pn)。我想找到以下为真的3个对象(p1 = 3,p2 = 7,P3 = 23),(p1 = 3,p2 = 43,p3 = 45),(p1 = 1,p2 = 232, p3 = 321)。
由于集合可能包含许多元素,并且我可能正在寻找许多(例如80)这样的元组,我不想在循环中执行此操作,因为这需要大量的往返。我更愿意这样做是一个单一的LINQ语句。这可能吗?
谢谢,
杰里
答案 0 :(得分:1)
您可以尝试以下方法,但我不确定它是否适用于Linq-to-entity。
IEnumerable<Tuple<int, int, int>> criterias = ...;
var filteredObjects = DataContext.YourObjects
.Join(criterias,
o => new {o.P1, o.P2, o.P3}, // your objects key
c => new {o.P1, o.P2, o.P3}, // criteria key
(o, c) => o);
答案 1 :(得分:0)
是的,你可以这样做。只是做:
var matches = entities.Where(e =>
(e.p1 == 3 && e.p2 == 7 && e.p3 == 23)
|| (e.p1 == 3 && e.p2 == 43 && e.p3 == 45)
|| (e.p1 == 1 && e.p2 == 232 && e.p3 == 321));