2011-10-25 5 views
4

このLINQの結果を別の方法で使用して、プロパティーCountryIDcountを取得する方法を教えてください。LINQ AnonymousTypeオブジェクトを反復する

public IQueryable GetRequestsByRegion(string RequestType) 
{ 
     try 
     { 
      var q = from re in context.RequestExtensions 
        from r in context.Requests 
        where re.ExtensionID == r.ExtraInfoID 
        && r.OriginalRequestID == null 
        && r.RequestType == RequestType 
        group re by new { CountryID = re.CountryID } into grouped 
        select new { CountryID = (int)grouped.Key.CountryID, count = (int)grouped.Count(t => t.CountryID != null) } ; 

      return q; 
     } 
     catch (Exception ex) 
     { 

     } 

     return null; 

    } 

public void GetAllInformationRequestsByRegion() 
    { 
     IQueryable dict = GetRequestsByRegion("tab8elem1"); 

     /* How to iterate and get the properties here? */ 

    } 

戻り値の型と変数の型は、指定されたものである必要はありません。これは私の試行でした。私もWCFを使用しているので、Object型を返すことはできません。

答えて

6

ちょうどそれは、オブジェクトの他の種類であるかのようにのように:

foreach(var obj in q) { 
    var id = obj.CountryID; 
    var count = obj.count; 
} 
+0

+1:今日の簡単なもの:) – leppie

+0

これを書いていないのは申し訳ありませんが、それはずっと滑っていました。これを前もって処理せずにLINQの結果を返してやりたい他の方法で。私はthieメソッドでどのような型を返す必要があり、呼び出しメソッドでオブジェクトを処理する方法は?また、WCFを使用して、オブジェクト型を返すことができない...ありがとう、不完全な質問を申し訳ありません。 –

+0

@LuísSousa: 'select g;'で停止し、 'IGrouping 'を返すことができます。 「最終的な」オブジェクトを返すには、それらのクラスを作成する必要があります。 – Jon

1

あなたは、通常のC#のオブジェクトと同じようにあなたが結果を処理することができます。インテリセンスは、匿名のタイピングであなたを助けます。

foreach (var anonymousObject in q) 
{ 
    // anonymousObject.CountryID; 
    // anonymousObject.count; 
} 
2

追加

おそらくあなたは、メソッドの外にこれを使用したいですか?

public void ForEach<T>(IEnumerable<T> l, Action<T> a) 
{ 
    foreach (var e in l) a(e); 
} 

使用法:次に、このようなものを使用。

ForEach(from x in bar select new { Foo = x, Frequency = 4444, Pitch = 100 }, 
    x => 
    { 
    //do stuff here 
    Console.WriteLine(x.Foo); 
    Console.Beep(x.Pitch,x.Frequency); 
    }); 
+1

私は突然変異する 'ForEach'を支持するためのdownvoteを考えています... ;-) – Jon

+0

@Jon:戻り値の型は' void'なので、私は半受け入れ可能です:)(サイドノート:私はこれまで考えませんでしたこのような構造を使用しました) – leppie

+0

これを今試してみてください。まだLINQメソッドで返すオブジェクトの種類については確かではありません...ありがとう –

0

匿名型は、それらが宣言されたメソッドに対してローカルですがあなたはそれらを直接返すことはできません。それらを宣言するメソッドの外部に公開する必要がある場合は、名前を付けることができるタイプ(独自のカスタムクラスまたはKeyValuePairのような他の既存のフレームワーククラス)に投影する必要があります。

関連する問題