2009-06-18 12 views
1

以下にサンプルコードをいくつか作成し、ラムダ式を使用してSoftwareComponents Dictionaryを照会しようとしています。問題は、クエリが型IGroupingのvarを返すことです。最初の文字列がSoftwareComponent.ComponentNameで、2番目の文字列がSoftwareComponentであるタイプのIGroupingを返すようにクエリをさらに絞り込む必要があるときです。 ComponentDescription。誰でもこれを行う方法を知っていますか? "新しいタイプの説明" "コンポーネント1" "コンポーネント2" "旧タイプ説明" "component3" "component4"ラムダ式で辞書を照会する

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     UnOwnedSoftware software = new UnOwnedSoftware(); 

     var components = software.SoftwareComponents.Values. 
      GroupBy(s => s.ComponentName); 
    } 
} 

public class UnOwnedSoftware 
{ 
    public Dictionary<int, SoftwareComponent> SoftwareComponents 
     = new Dictionary<int, SoftwareComponent>(); 

    public UnOwnedSoftware() 
    { 
     SoftwareComponent component1 = new SoftwareComponent 
      ("component1", 1, "New Type Description"); 
     SoftwareComponent component2 = new SoftwareComponent 
      ("component2", 2, "New Type Description"); 
     SoftwareComponent component3 = new SoftwareComponent 
      ("component3", 3, "Old Type Description"); 
     SoftwareComponent component4 = new SoftwareComponent 
      ("component4", 4, "Old Type Description"); 

     SoftwareComponents.Add(1, component1); 
     SoftwareComponents.Add(2, component2); 
     SoftwareComponents.Add(3, component3); 
     SoftwareComponents.Add(4, component4); 
    } 
} 

public class SoftwareComponent 
{ 
    public string ComponentName { get; set; } 
    public int ID { get; set; } 
    public string ComponentDescription { get; set; } 

    public SoftwareComponent(string componentName, int id, string componentDescription) 
    { 
     ComponentName = componentName; 
     ID = id; 
     ComponentDescription = componentDescription; 
    } 
} 
+0

結果をどのように表示するかの例を挙げることはできますか? – LukeH

+0

OK、私は例を追加しました。 –

答えて

3

:私はデータを期待していた

は次のようになり返さ試してみてください:

var components = (from s in software.SoftwareComponents.Values 
        select new 
        { 
         Name = s.ComponentName, 
         Description = s.ComponentDescription 
        }) 
       .ToList().GroupBy(s=>s.Name); 
1

指定したサンプルデータでは、ComponentNameでグループ化しても結果は得られません有用なグループ。データに実際に各コンポーネントの固有の名前が付いているかどうかはわかりませんが、存在する場合、グループ化は実際には値を提供しません。実際にあなたが必要なグループ化を達成するために

は、しかし、次の操作を実行できます。

var components = from v in software.SoftwareComponents.Values 
       group v by v.name into g 
       select new { ComponentName = g.Key, Description = g.First(v => v.Description); 

コンポーネント名と説明を持つコンポーネントの列挙になる必要があること。グループから値を取り出す唯一の方法は、最初または最後のエントリを選択するか、総和、平均値などを実行することです。直接選択できる値はキーです(コンポジットなので複数の値があります) )

+0

質問を再読した後、あなたの答えは彼が望むものに近い。 – epitka

関連する問題