【问题标题】:LINQ statement using Orderby and Distinct in sub query在子查询中使用 Orderby 和 Distinct 的 LINQ 语句
【发布时间】:2014-07-22 10:20:47
【问题描述】:

您好,我有以下 LINQ 查询,我正在尝试排序并选择不同的值。

 var records = (from c in db.pt
                       join y in db.pro on c.id equals y.id
                       where c.id == id
                       select new proj
                           {
                               id = cid,
                               newStructure = new List<team>
                                   {
                                       new teamP
                                           {
                                               t_id = c.p_id,
                                               full_name = c.per.last_name + " ," + c.per.last_name,

                                           }
                                   }
                           }).ToList().OrderBy("full_name").distinct();

在上面关于 OrderBy 的查询中,我得到智能错误“无法从用法中推断出来。尝试明确指定类型参数” 请让我知道如何解决此错误。谢谢

【问题讨论】:

  • 一条评论 - 对ToList 的调用会将所有数据拖到您的流程中,此时您将在本地订购和区分。这是故意的吗,因为您真的应该让您的数据库执行订单并且与众不同。
  • 1. 为什么需要y in db.pro?加入有什么作用? (它是一个内部连接,所以它可以是一个过滤器 - 这是故意的吗?)2. 类和属性应该使用 PascalCase:projteamlast_name 等。你可能有你自己的约定,但很尴尬3.OrderByDistinct 有什么意义?我怀疑Distinct 保证保持订单,所以这没什么用:LINQ to SQL does not generate ORDER BY when DISTINCT is used?

标签: c# linq entity-framework


【解决方案1】:

这样做。

var records = (from c in db.pt
               join y in db.pro on c.id equals y.id
                  where c.id == id
                         select new proj
                          {
                             id = cid,
                              newStructure = new List<team>
                                {
                                    new teamP
                                       {
                                           t_id = c.p_id,
                                           full_name = c.per.last_name + " ," +                         c.per.last_name,

                                       }
                               }
                       }).distinct().ToList();

添加这一行

records=records.OrderBy(x=>x.fullname == "Full_Name");

【讨论】:

  • 出于兴趣,为什么在拨打Distinct之前先拨打ToList
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多