簡體   English   中英

Linq to Entities-OrderBy標簽(多對多關系)

[英]Linq to Entities - OrderBy Tags (many to many relationship)

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有可能嗎?

謝謝。

看起來您在尋找的是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();

這將產生具有兩個屬性的匿名對象列表:

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

我對這里的邏輯很確定,但對那里使用的所有東西的LINQ to Entities支持卻不太確定。

我最終以不同的方式看待這個問題。

我只是將所有標簽傳遞到視圖(按字母順序排序)-然后遍歷這些標簽 在遍歷每個標簽的同時,我遍歷了標簽中的每個位置(導航屬性)。

解決問題的方法很簡單:

@foreach (var t in Model)
{
   <h2>@t.Name</h2>

   foreach (var p in t.Places)
   {
       <li>@Html.ActionLink(p.Name, "Details", new { URL = p.URL })</li>
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM