我有一个生成匿名类型的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
非常感谢, 肯尼。
答案 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))
};