linq使用元组列表来对象

时间:2011-03-23 22:28:03

标签: c# linq

我需要在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语句。这可能吗?

谢谢,

杰里

2 个答案:

答案 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));