EF and Linq OrderBy using two Parameters
我使用EF4和C。
我需要用属于两个不同实体的两个属性来排序这个查询的结果。
在我的情况下,我希望由gt.GroupTypeId及其subset by cnt.ContentId订购。
附言:我不确定我的头衔是否合适,如果你认为不合适,请告诉我我会改变它的:-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| from cnt in context .CmsContents
from gt in cnt .CmsGroupsTypes
join t in context .CmsTypes
on cnt .TypeContent equals t .TypeContent
join m in context .CmsModes
on cnt .ModeContent equals m .ModeContent
orderby gt .GroupTypeId // Problem here
select new
{
cnt .ContentId,
cnt .Title,
gt .TypeGroup,
gt .GroupTypeId,
TypeContentDescription = t .Description,
ModeContentDescription = m .Description,
cnt .IsPublished
}; |
简单的例子:
1
| var orderedList = cnt.OrderBy(x => x.GroupTypeId).ThenBy(x => x.ContentId); |
- 谢谢你解决了这个问题。
- @吉布,不客气!
- 我也试着……orderby gt.grouptypeid,cnt.contentid…。而且它在工作。我们可以说你的版本和我的版本是一样的吗?(感谢您的时间,我正在学习ef:-)
- 您的orderby条款将转换为orderby呼叫。而且,Linq查询的工作速度比通过扩展方法编写的相同内容要慢一些。
- 感谢Vittore对您的评论,您的意思是我的版本(用sugar语法编写)可能比使用扩展方法的相同版本慢吗?对的?
- @vittore:您是否有对语句"Linq查询比扩展方法慢"的引用?我从没听说过。
- 斯劳玛:我会试图找到比较,但我们在几个使用ef的项目上得出了这个结果,并试图避免后面的linq语法:是的,sugar语法表达式的翻译需要时间来翻译,而在简单的查询中,这并不重要,当您进行分组、排序和几个连接时,它变得更加明显需要注意。
- @斯劳玛:这是stackoverflow.com/questions/1182922/&hellip上的线程。
- @我的理解是,这个问题比较了LINQ/扩展方法和非LINQ/非扩展方法。其中一个答案是:"对于LINQ查询,使用‘新语法’,生成的IL(代码)与直接调用Enumerable和Queryable提供的扩展方法没有根本区别。"我也是这么想的。另请参见jon skeet的回答:stackoverflow.com/questions/671235/linq如何在内部工作‌&8203;/…特别是"查询表达式"部分,他说linq查询语法在编译时被转换为扩展方法。
- @vittore语法的翻译发生在编译时。没有运行时差异。