[英]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.