如何从列表中选择具有相关条件的多个项目

时间:2017-04-27 15:03:39

标签: c# linq select

所以我有一个班级:

public class Timing
{
    public int Id { get; set; }
    public double Duration { get; set; }
}

Timing类列表:

List<Timing> times = GetTimings();

所以我想从t1中选择t2times t1.Duration + t2.Duration == 20;我如何选择这两个项目?任何想法?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

var query= from t1 in times
           from t2 in times
           where t1!=t2 && (t1.Duration + t2.Duration) == 20
           select new {t1,t2};

如果您不想重复,请执行此操作:

var query = from index in Enumerable.Range(0, times.Count)
            let t1= times[index] 
            from t2 in times.Skip(index + 1)
            where (t1.Duration + t2.Duration) == 20
            select new { t1, t2};

答案 1 :(得分:2)

您可以通过执行自连接来使用LINQ执行此操作,但由于过滤了笛卡尔积,算法将为O(n 2 )。

你可以更快地完成它 - 在O(n)中,如果你构造一个字典,将持续时间映射到对应于该持续时间的Timing个对象列表,然后从字典中检索列表{ {1}}:

20 - t.Duration