asp.net mvc 4,Entity Framework 5,SQL Server 2012 Express,Code First
我有一个Place模型:
public virtual int PlaceID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual string Name { get; set; }
和相关的Tag模型:
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可以实现吗?
感谢。
答案 0 :(得分: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();
它将生成一个包含两个属性的匿名对象列表:
{
public string Tag { get; set; }
public List<string> Places { get; set;}
}
我非常确定这里的逻辑,但不是LINQ to Entities支持那里使用的所有东西。
答案 1 :(得分:0)
我最后以不同的方式看待这个。
我只是将所有标记传递给视图(按字母顺序排序) - 然后循环遍历这些标记。循环遍历每个标记时,我遍历其中的每个位置(导航属性)。
解决问题的非常简单的方法:
@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>
}
}