OrderBy 将 Dynamic Linq 与 Relation 结合使用
Posted
技术标签:
【中文标题】OrderBy 将 Dynamic Linq 与 Relation 结合使用【英文标题】:OrderBy using Dynamic Linq with Relation 【发布时间】:2017-04-26 03:05:47 【问题描述】:我正在尝试按相关对象的属性进行排序。只是一个例子,情况就是这样。我有这两个类:
public class Publication
public int Id get; set;
public string Name get; set;
public List<Product> Products get; set;
public class Product
public int Id get; set;
public string Name get; set;
public int PublicationId get; set;
[ForeignKey("PublicationId")]
public Publication Publication get; set;
public int Category get;set;
现在我需要获取 Product's Category = 1 并按 Publication Id desc 排序的所有出版物:
IQueryable<Publication> query = db.Publications.Where("Products.Any(Category = 1)");
List<Publication> list = query.OrderBy("Id desc").ToList();
这很好用!但是...如何使用 Dynamic Linq 按产品类别(desc 或 asc)订购出版物?
【问题讨论】:
你不能只做 OderByDescending 吗? (msdn.microsoft.com/en-us/library/bb534861(v=vs.110).aspx) 顺序(asc 或 desc)现在不是问题。问题是关于如何按关系排序(按升序或降序)。在这种情况下,类别(来自产品)Publication
有一个或多个产品,因此也有类别。您首先应该定义如何对类别集合进行排序。
一个出版物有一个或多个产品。 Category 只是 Product 中的一个整数。我只需要根据产品类别的数量对 PUBLICATIONS 进行排序。
相关? ***.com/questions/6617596/…
【参考方案1】:
我还没有找到使用System.Linq.Dynamic
的方法,但Linq
可以使用
var query = publications.OrderByDescending(p => p.Products.Select(x => x.Category).FirstOrDefault()).ToList();
这里是测试类:
var publications = new List<Publication>
new Publication
Products = new List<Product>
new Product Category = 5,
new Product Category = 6,
new Product Category = 7
,
new Publication
Products = new List<Product>
new Product Category = 2,
new Product Category = 3,
new Product Category = 4
,
new Publication
Products = new List<Product>
new Product Category = 8,
new Product Category = 9,
new Product Category = 10
;
var query = publications.OrderByDescending(p => p.Products.Select(x => x.Category).FirstOrDefault()).ToList();
query.ForEach(x => Console.WriteLine(x.ToString()));
输出是:
8 , 9 , 10
5 , 6 , 7
2 , 3 , 4
如您所见,它并没有在内部订购 Products
。
【讨论】:
谢谢,但我在 Dynamic Linq 中需要这个。 好的,我会注意的,你的订单标准是什么?,但是出于好奇,如果你可以使用“普通”的,为什么选择 Dynamic Linq? 那是因为我正在 webapi 中从 url 构建字符串查询。这都是动态生成的。一切正常。我只需要这个来完成项目。你的订单没问题。出版物根据嵌套的产品类别按升序或降序排序。 我做的方式是按找到的第一个产品的类别排序,如果没有则取0,这是你的标准吗? 我觉得还可以以上是关于OrderBy 将 Dynamic Linq 与 Relation 结合使用的主要内容,如果未能解决你的问题,请参考以下文章