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アイテムで

1番目と2番目の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

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
)
于 2012-07-31T14:29:10.770 に答える
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
        );

編集:Intersect2つのリストが関係しているため追加されました。

于 2012-07-31T14:29:23.007 に答える
0

Filter.A の少なくとも 1 つの要素が dict.Key.A の 1 つの要素と一致する必要がある場合は、それも可能です。

List を持つことの利点がわかりません... 1つの int だけです!

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