当条件匹配时,重新排序LINQ结果(取1行并将其移至顶部)

时间:2010-01-14 00:48:18

标签: linq

我有一个生成匿名类型的LINQ语句,例如:

BookID,AuthorID,[作者] ***

作者返回IEnumerable,其中也包含许多作者,它有2列:AuthorID和AuthorName

例如:

1 | 32 | 12,作者1

     20, Author 3

     32, Author 19

如何重新排序作者对象,以便[32,作者19]位于顶部,如下:

1 | 32 | 32,作者19

     12, Author 1

     20, Author 3

非常感谢, 肯尼。

2 个答案:

答案 0 :(得分:1)

正如亚历克斯所说,你只需要重新创建匿名类型。要将特定作者添加到列表顶部,您可以使用orderby子句(或OrderBy扩展方法),我认为这比使用Where和{{}更容易一些1}}:

Union

唯一的技巧是你可以使用布尔值(AuthorID == 32)作为排序的关键。通过这种方式,您将首先获得谓词返回的所有元素new { ... Authors = from a in record.Authors orderby a.AuthorID == 32 descending select a }; (ID = 32的元素),然后获取所有其他值(谓词返回true)。

答案 1 :(得分:0)

您可以只重新创建匿名类型的对象,因为它的readonly属性无法更改。

这样的事情:

  record =
    new {
      record.BookId,
      record.AuthorId,
      Authors =
        record.Authors.Where(author => author.Id==32).Union(
          record.Authors.Where(author => author.Id!=32))
    };