我想按排序属性对关键字进行排序。 我在页面之间有一对多的关系 - >关键字。
问题:如果我执行理解查询:
IEnumerable<page> query = from p in contxt.pages where p.ID == myId select p;
IEnumerable<page> pge = query.First();
我可以期待单页记录集包含所有页面属性和一个关键字集合吗?
我的理解是因为存在一对多的关系,所以我不必进行连接。 Linq to Entity框架应该知道这种关系,并返回一个集合。
所以这是我的理解,所以当我尝试对keyword.sort进行排序时,关键字超出了范围:
IEnumerable<page> query = from p in contxt.pages where p.ID == myId
orderby p.keywords. select p;
利用上述理解,我认为查询不正确,因为关键字作为集合返回,所以我必须按如下方式执行排序:
PageKeywords pageKeywords = new PageKeywords();
Keywords keywords;
IEnumerable<page> query = from p in contxt.pages
where p.ID == vals.pageId select p;
page pge = query.First();
pageKeywords.keywords = new List<Keywords>();
pageKeywords.id = pge.ID;
pageKeywords.description = pge.descp;
pageKeywords.title = pge.title;
pageKeywords.showTitle = pge.showTitle;
pageKeywords.keywords = pge.keywords.OrderBy(k => k.sort);
foreach (var item in pageKeywords.keywords)
{
keywords = new Keywords();
keywords.id = item.id;
keywords.name = item.name;
keywords.sort = item.sort;
pageKeywords.keywords.Add(keywords);
}
然而这不起作用。关键字没有按排序排序?上面的代码确实有效,但是我需要按sort属性对关键字进行排序。关键字集合未进行排序。
我也尝试过:
pageKeywords.keywords.Sort((x, y) => int.Compare(x.sort, y.sort));
哪个不起作用。
我试过了解,但我错过了什么?任何建议都会很明显。
答案 0 :(得分:2)
试试这个:
var query = from p in contxt.Pages
where p.ID == vals.PageId
select new PageKeywords
{
Id = pge.Id,
Description = pge.Descp,
Title = pge.Title,
ShowTitle = pge.ShowTitle,
Keywords = pge.Keywords.OrderBy(k => k.sort)
};
答案 1 :(得分:0)
OrberBy返回一个新的枚举 - 它不会更改源:http://msdn.microsoft.com/en-us/library/bb534966.aspx
此外,您希望按关键字的属性进行排序,页面可能包含许多关键字,您需要选择一个(例如最少一个)。
尝试:
IEnumerable<page> query = context.pages // Pages
.Where(p => p.ID == myId) // Filtered by id
// Sort by minimum sort value of all keywords of page
.OrderBy(p.Keywords.Select(keyword => keyword.sort).Min());
另外,建议使用.NET的名称指南(例如,属性应该是PascalCase而不是camelCase)。