【问题标题】:EF and Linq OrderBy using two ParametersEF 和 Linq OrderBy 使用两个参数
【发布时间】:2011-11-30 19:15:09
【问题描述】:

我使用 EF 4 和 C#。

我需要使用属于两个不同实体的两个属性来排序此查询的结果

就我而言,我想通过gt.GroupTypeId 及其subset by cnt.ContentId 订购。

PS:我不确定我的标题是否合适,如果您认为不合适,请告诉我我会更改它:-)

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
            };

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    简单示例:

    var orderedList = cnt.OrderBy(x => x.GroupTypeId).ThenBy(x => x.ContentId);
    

    【讨论】:

    • 我也尝试.... orderby gt.GroupTypeId, cnt.ContentId .... 它正在工作。我们可以说你的版本和我写在这里的版本是一样的吗? (感谢您花时间学习 EF :-)
    • 您的orderby 子句将被转换为OrderBy 调用。此外,Linq 查询的工作速度比通过扩展方法编写的相同内容要慢
    • 感谢 vittore 的评论,你的意思是我的版本(用糖语法编写)可能比使用扩展方法的相同版本慢吗?对吗?
    • @vittore:您的语句“LINQ 查询比扩展方法慢”有参考吗?我从来没有听说过。
    • @vittore:我的理解是这个问题比较了 LINQ/Extension 方法与 Non-LINQ/Non-Extension。一个答案是:“对于 LINQ 查询,使用‘新语法’,生成的 IL(代码)基本上与直接调用 Enumerable 和 Queryable 提供的扩展方法没有什么不同。”。这也是我的假设。另请参阅 Jon Skeet 的回答:stackoverflow.com/questions/671235/how-linq-works-internally/… 特别是“查询表达式”部分,他说 LINQ 查询语法在编译时被转换为扩展方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多