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查询?
当A
为int
时,这很简单
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>
时,它对我来说更复杂。
答案 0 :(得分:1)
只需使用Contains并反转控件
即可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
)
答案 1 :(得分:0)
您可以使用Intersect方法
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
,因为涉及两个列表。
答案 2 :(得分:0)
如果Filter.A中至少有一个元素必须匹配dict.Key.A的一个元素,那么你也可以这样做。
因为我没有看到有一个列表的兴趣...只有一个int!
var result = dict.Where(k =>
filter.A.Intersect(k.Key.A).Any());