1

asp.net mvc 4、エンティティ フレームワーク 5、SQL Server 2012 Express、コード ファースト

私は場所モデルを持っています:

public virtual int PlaceID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual string Name { get; set; }

および関連するタグ モデル:

public virtual int TagID { get; set; }
public virtual string Name { get; set; }
public virtual string NamePlural { get; set; }
public virtual ICollection<Place> Places { get; set; }

それらは多対多の関係にあります。

「レストラン」というタグが付いたすべての場所を選択しています。

 List<Place> Restaurants = allPlaces.Where(
    p => p.Tags.Any(
       t => t.Name == "Restaurant")).OrderBy(p => p.Name).ToList();

これを順序付けされたタグで表示し、名前で並べ替えたいと思います。

5つの場所があるとしましょう:

My Cafe Bar, Tags="Restaurant", "Cafe", "Bar"
Another Cafe, Tags="Restaurant", "Cafe"
Marios Italian, Tags="Restaurant", "Italian", "Bar"
Donnies Pizzaria, Tags="Restaurant", "Italian"
A1 Chinese, Tags="Restaurant", "Chinese"
Fusion One, Tags="Restaurant", "Chinese", "Italian"
China Garden, Tags="Restaurant", "Chinese"

以下の順序で出力したいと思います (すべてレストランなので、レストラン グループを出力する必要はありません)。

>>Bars
Marios Italian
My Cafe Bar

>>Cafes
Another Cafe
My Cafe Bar

>>Chinese
A1 Chinese
Fusion One
China Garden

>>Italian
Donnies Pizzaria
Fusion One
Marios Pizzaria

私の見解では、上記のように見出しを付けて表示したいと思います。

これはLinqで可能ですか?

ありがとう。

4

2 に答える 2

2

GroupByではなくを探しているようですOrderBy。このクエリを確認してください。

var restaurants = allPlaces.Where(p => p.Tags.Any(t => t.Name == "Restaurant"))
                           .SelectMany(p => p.Tags, (p, t) => new { Tag = t.Name, Name = p.Name })
                           .GroupBy(i => i.Tag)
                           .Where(g => g.Key != "Restaurant")
                           .Select(g => new { Tag = g.Key, Places = g })
                           .ToList();

2 つのプロパティを持つ匿名オブジェクトのリストが生成されます。

{
    public string Tag { get; set; }
    public List<string> Places { get; set;}
}

ここでのロジックについてはかなり確信がありますが、そこで使用されるすべてのものに対する LINQ to Entities のサポートについては確信が持てません。

于 2013-06-07T07:56:38.433 に答える