【问题标题】:Select one column, order by another选择一列,按另一列排序
【发布时间】:2014-08-17 10:46:32
【问题描述】:

我正在使用 LINQ to SQL 从数据库中进行选择。我想选择一个包含String 值的列,但按包含int 的“优先级”值的另一列排序。

这就是我的 LINQ 语句现在的样子:

var query = from vk in db.Valdkurs
            where vk.pnr == pnr
            select vk.kursnamn.OrderByDescending(x => vk.prioritet);

在第三行代码中,NotSupportedException 抛出异常消息

“System.String”类型不支持序列运算符

我得出的结论可能是因为

vk.kursnamn.OrderByDescending(x => vk.prioritet);

其中vk.Kursnamn 属于String 类型。

如何选择vk.Kursnamn 并按vk.Priority 排序?

【问题讨论】:

    标签: c# linq linq-to-sql sql-order-by


    【解决方案1】:

    您需要先订购,然后选择,如下所示:

    var query = db.Valdkurs
        .Where(vk=> vk.pnr == pnr)   // Filter
        .OrderBy(vk => vk.prioritet) // prioritet is still here - order by it
        .Select(vk => vk.kursnamn);  // Now grab the kursnamn
    

    否则,LINQ 认为您正在尝试对 string 的字符进行排序,这是不受支持的操作。

    【讨论】:

    • 虽然三个答案都差不多,而且都运行得很好,但我还是会选择这个作为正确答案,因为它帮助我最好地理解了 LINQ 的语法。
    【解决方案2】:

    你可以把它改写成:

    var query = from vk in db.Valdkurs 
                where vk.pnr == pnr 
                orderby vk.prioritet descending
                select vk.kursnamn;
    

    【讨论】:

      【解决方案3】:

      我不确定 LINQ 语法,但基本上你想要做的是:

      var query = db.Valdkurs
                    .Where(vk=> vk.pnr == pnr)
                    .OrderByDescending(vk => vk.prioritet)
                    .Select(vk => vk.kursnamn);
      

      您可以通过各种方式将这些链接在一起。本质上,每个人都会修改集合并返回修改后的集合。 (或者至少他们会在执行时以这种方式评估,例如,当您调用 .ToList() 时会发生这种情况。)

      【讨论】:

        【解决方案4】:

        试试这个:

        int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);
        

        【讨论】:

          猜你喜欢
          • 2018-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-22
          • 2014-03-17
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          相关资源
          最近更新 更多