最初に Entity Framework コードを使用する Web アプリケーションがあり、以下のサンプル データを ASP.NET のさまざまなエンティティ データ対応コントロールに接続できるようにしたいと考えています。
コントロールの ItemType プロパティを使用してカスタムカプセル化クラスを指定し、コントロールの SelectMethod プロパティを使用して LINQ クエリを呼び出すことにより、コントロールが使用できる IQueryable コレクションを返す必要があり、自動ページネーションなどで動作します。
開始するエンティティがあると仮定しましょう:-
public class MyEntity
{
[Key]
public int MyObjectId { get; set; }
public string Name { get; set;}
}
したがって、このLINQクエリは正常に機能します
public IQueryable<MyObject> GetMyObjects()
{
SiteContext db = new SiteContext();
var myObjects = (from m in db.MyObjects
select m);
return myObjects;
}
現在、次のサンプルデータを使用しています:-
MyObjectId Name
1 Apple
2 Orange
3 Apple
4 Apple
5 Pear
6 Orange
7 Apple
8 Grapes
9 Apple
10 Orange
私がやりたいことは、データをグループ化し、次のようなカウントを提供することです:-
Name Count
Apple 5
Orange 3
Pear 1
Grapes 1
したがって、私の最初のステップは、エンティティをカプセル化し、追加のカウント列を提供するクラスを作成することです:-
public class MyObjectWithCount
{
public MyObject MyObject { get; set; }
public int Count { get; set; }
}
今、LINQ クエリでいくつかの結果を取得したい
public IQueryable<MyObjectWithCount> GetMyObjectsWithCount()
{
SiteContext db = new SiteContext();
var myObjects = (from m in db.MyObjects
group m by m.Name into grouped
select new MyObjectWithCount()
{
MyObject = grouped,
Count = ?what goes here?
});
return myObjects;
}
したがって、select new MyObjectWithCount() には2つの問題があります
1) グループ化された各アイテムの数を取得するにはどうすればよいですか
2) グループ化されたオブジェクトを Myobject に変換するにはどうすればよいですか。現状では、type system.linq.grouping を MyObject に暗黙的に変換できないという設計時のエラーが発生します。
LINQ クエリでグループ化を実行しなかった場合、IQueryable をコントロールに正常に返すことができ、すべて正常に接続されます (ただし、この段階では明らかにカウントが欠落しています)。
また、明確にするために、これは私のエンティティ/クラスの単純化された例です。実際には、上記の例のように名前フィールドだけでなく、多くのフィールドがあるため、完全な MyObject エンティティにアクセスする必要があります。
あなたが提供できるどんな助けにも感謝します