0
public class Filter
{
    public List<int> A { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
}
var f1 = new Filter(){A = new List<int>() {1}}
var f2 = new Filter(){A = new List<int>() {1 , 4, 2}, Start = DateTime.Now, End = DateTime.AddHour(2)}

var dict = new Dictionary<Filter, string>()
dict.Add(new Filter(){A = new List<int>() {1}}, "asdf");
dict.Add(new Filter(){A = new List<int>() {4}}, "qwerty");
dict.Add(new Filter(){A = new List<int>() {3}}, "qwertyasd");

我需要得到:

先有f1项目

f2第一个和第二个项目。

如何构造 linq 查询?

什么时候,Aint简单

dict.Where(k =>
k.Key.A.Equals(filter.A)
&& k.Key.Start.CompareTo(filter.Start) > 0 
&& k.Key.End.CompareTo(filter.End) < 0
)

但是当它不是时,List<int>它对我来说更复杂。

4

3 回答 3

1

只需使用包含并反转控件

dict.Where(k =>
    filter.A.Contains(k.Key.A[0]) //CONTAINS !
    && k.Key.Start.CompareTo(filter.Start) > 0 
    && k.Key.Start.CompareTo(filter.End) < 0
)
于 2012-07-31T14:29:10.770 回答
0

您可以使用相交方法

dict.Where(k =>
            k.Key.A.Intersect(filter.A).Any()
            && k.Key.Start.CompareTo(filter.Start) > 0
            && k.Key.End.CompareTo(filter.End) < 0
        );

编辑:添加Intersect,因为涉及两个列表。

于 2012-07-31T14:29:23.007 回答
0

如果Filter.A的至少一个元素必须匹配dict.Key.A的一个元素,你也可以这样做。

因为我没有看到有一个 List 的兴趣......只有一个 int !

var result = dict.Where(k =>
                           filter.A.Intersect(k.Key.A).Any());
于 2012-07-31T14:40:16.963 回答