2011-07-06 10 views
0

linqクエリを使用して、各日付が1つの値の項目しか持たないオブジェクトを選択できます。 したがって、次のリストに:それはアイテム22および25linq to objects query:他の値が存在しないオブジェクトを選択します。

を有するため、そのアイテムは双方25

2)2011年1月1日が選択されないされているので

1)2011年1月4日が選択されます

3)2011-1-2と2011-1-3は1つのアイテムしか持たないため選択されます。

public class MyClass 
    { 
     public DateTime date { get; set; } 
     public int item { get; set; } 
    } 
    static void Main(string[] args) 
    { 
     List<MyClass> classes = new List<MyClass> 
     { 
     { new MyClass() { date = new DateTime(2011, 1, 1), item = 22 } }, 
     { new MyClass() { date = new DateTime(2011, 1, 1), item = 25 } }, 
     { new MyClass() { date = new DateTime(2011, 1, 2), item = 23 } }, 
     { new MyClass() { date = new DateTime(2011, 1, 3), item = 24 } }, 
     { new MyClass() { date = new DateTime(2011, 1, 4), item = 25 } }, 
     { new MyClass() { date = new DateTime(2011, 1, 4), item = 25 } }, 
     }; 
    } 

この内容はどうですか?かなりあなたの人の答えを見てから得た。

  var results = classes.GroupBy(m => m.date); 
     var q = from n in results where n.All(r => r.item == n.First().item) select n; 

答えて

0

これはあなたの要件を満たすように見える私はLinqpadを通じて実行したいくつかの未編集の醜さがあります。

var query = classes.GroupBy(c => c.date) 
        .Select(g => g.GroupBy(c => c.item)) 
        .Where(sg => sg.Count() == 1) 
        .SelectMany(sg => sg) 
        .SelectMany(g => g) 
        .Select(c => c.date) 
        .Distinct(); 

お客様の要件に応じて、1/2,1/3,1/4の日付を返します。

+0

var results = classes.GroupBy(m => m.date); var q =結果のnからn.All(r => r.item == n.First()。item)select n; – tim

+0

あなたはそれを解決しました。私はあまりにも小さすぎてまだLMAOでした。 – tim

+0

@tim、私のバージョンを使っていて、日付だけではなく完全なオブジェクトが必要な場合は、2回目の 'SelectMany'の後にクエリを切ることができます。 –

0
var results = classes 
     .GroupBy(m => m.date) 
     .Where(g => g.Select(x => x.item).Distinct().Count() == 1) 
     .Select(g => g.Key).ToList(); 
+0

。 –

+0

@Anthonyどうですか? –

+0

まだ小さすぎます。 –

0

は、これが動作しているようですが、私はそれで満足していると言うではないでしょう:これはあまりにも少ないを選択

var results = from m in classes 
       group m by new { m.date } into x 
       where x.GroupBy(y => y.item).Count() == 1 
       select x; 
関連する問題