【问题标题】:LINQ OrderBy not ordering .. changing nothing .. why?LINQ OrderBy 不排序..什么都不改变..为什么?
【发布时间】:2012-05-31 10:02:23
【问题描述】:

知道为什么 LINQ OrderBy 在以下代码中不起作用,(没有错误,但方法无法排序...)

首先是我自己的类型

public class IQLinksView
    {
        public int id { get; set; }
        public int catid { get; set; }
        public int? viewed {get;set;}
        public string name {get;set;}
        public string desc {get;set;}
        public string url {get;set;}
        public string pic {get;set;}
        public string cat {get;set;}
    }

然后查询:

IQueryable<IQLinksView> newView = 
              from links in this.emContext.tbl_otherlinks
              select new IQLinksView { id = links.pklinkid, catid =
              links.tbl_catgeory.pkcategoryid, viewed = links.linkviewed, name = links.linkname, 
              desc = links.linkdesc, pic = links.linkpicture,   url = links.linkurl, cat =
              links.tbl_catgeory.categoryname };

直到这里一切都很好:-),但是

newView.OrderBy(x => x.viewed);

只是没有改变,...页面正在加载结果显示...但没有排序...嗅探

我有尝试(创建一个比较器对象...):

newView.OrderBy(x => (Int32)x.viewed, new CompareIntegers());

相同的结果,没有排序...

我确实有解决方法,但只是想知道缺少什么......

任何建议将不胜感激:-)

【问题讨论】:

    标签: linq entity-framework sql-order-by iqueryable


    【解决方案1】:

    不要丢弃返回值。 OrderBy 扩展方法是 not 改变输入。试试:

    newView = newView.OrderBy(x => x.viewed);
    

    假设viewed 的值是正确的,那没有理由不起作用。此外,请确保 OrderBy 在任何会破坏排序的操作(例如 Distinct)之后。

    编码愉快!

    【讨论】:

    • 超级!工作正常,没想到回报,假设突变
    • 非常感谢,喜欢这份工作 ;-)
    • 我的问题是我在一个独特的之前有它。
    • 我按未显示的字段排序
    【解决方案2】:

    No-Tracking Queries

    如果结果是只读结果,请考虑在 orderby() 之后使用 asnotracking()。

    例子:

    query = query.OrderByDescending(x => x.Rating).AsNoTracking();
    

    【讨论】:

      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多