c#-使用LINQ根据多个表中的多个属性有条件地对元素进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-使用LINQ根据多个表中的多个属性有条件地对元素进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2107字,纯文字阅读大概需要4分钟。
内容图文
![c#-使用LINQ根据多个表中的多个属性有条件地对元素进行排序](/upload/InfoBanner/zyjiaocheng/656/fb9c9012e319443ab500db5183f1c23c.jpg)
最近,我需要对页面列表和导航菜单项进行排序,它们彼此关联.
每个导航都有一个Page属性.每个页面都有一个Navigation属性.它们是我数据库中的外键引用.
我有一个导航项目的列表以及每个页面项目的列表.问题在于,无论页面与导航相关联,它都存储在页面项列表中.
我想生成一个页面项的排序列表,如下所示:具有非空导航的项由Page.Navigation.Index属性排序.导航为空的项目按Page.Title属性排序,然后按Page.ID属性排序.
以下是我们目前正在做的工作,除了少数例外,它在大多数情况下都有效.
我的问题是,如果没有与之相关的导航,就无法处理页面的重复标题.
List<Page> page1 = db.Navigations.OrderBy(n => n.Index).Select(n => n.Page).ToList();
List<Page> page2 = db.Pages.Where(p => !db.Navigations.Contains(p.Navigation)).ToList();
model.Pages = page1.Concat(page2).ToList();
这是一些示例数据和预期结果
Pages Table (PageID, Title, Content)
0, "Home", "<html>This is a home page</html>"
3, "Some Page", "<html>This is some page.</html>"
2, "Some hidden page", "<html>This is some hidden page.</html>"
4, "Products", "<html>We've got products!</html>"
5, "aaaaa", "<html>This should be sorted to the top of pages with no nav</html>"
Navigations Table (PageID, Index)
0, 0
3, 2
4, 1
Output (PageID, Title, Content)
0, "Home", "<html>This is a home page</html>"
4, "Products", "<html>We've got products!</html>"
3, "Some Page", "<html>This is some page</html>"
5, "aaaaa", "<html>This should be sorted to the top of pages with no nav</html>"
2, "Some hidden page", "<html>This is some hidden page.</html"
我很好奇这是否可以以一种更好的方式进行,并且还可以使用查询语法而不是过程语法.
解决方法:
我想这可以解决问题:
model.Pages = db.Pages
.OrderBy(p=>p.Navigation != null ? p.Navigation.Index : Int32.MaxValue)
.ThenBy (p=>p.Title)
.ThenBy (p=>p.PageID)
.ToList();
或者,如果您喜欢这种语法
var query = from p in db.Pages
orderby p.Navigation != null ? p.Navigation.Index : Int32.MaxValue,
p.Title,
p.PageID
select p;
model.Pages = query.ToList();
当页面存在时,页面按Navigation.Index排序,而没有Navigation.Index的页面将出现在这些页面之后(它们实际上具有Int32.MaxValue作为Navigation.Index).因为没有Navigation.Index的元素现在具有唯一值(Int32.MaxValue),所以这些元素将按Title再按PageId进行排序.
内容总结
以上是互联网集市为您收集整理的c#-使用LINQ根据多个表中的多个属性有条件地对元素进行排序全部内容,希望文章能够帮你解决c#-使用LINQ根据多个表中的多个属性有条件地对元素进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。