我试图过滤用户请求的结果。
例如,您有orders
和order details
,products
是子集合。
当用户想要按产品过滤时,由于No property or field 'PRODUCTS' exists in type 'ICollection
1'`
我正在写这样的查询。
var orders = _uow.Repository<ORDERS>()
.Query()
.Where("PRODUCTS.HEADING.ToLower().Contains(\"foo\")")
.Include("ORDER_DETAILS")
.Include("ORDER_DETAILS.PRODUCTS")
.ToList();
所以不可能像这样过滤子集合吗?或者任何方式来过滤?
感谢。
答案 0 :(得分:3)
从命名类/属性的方式来看,很难猜出哪一个是单个对象,哪一个是集合属性。
如果ORDER_DETAILS
类属性ORDER_DETAILS
是ORDER_DETAILS
类的集合,则PRODUCTS
类属性PRODUCTS
是HEADINGS
的唯一对象具有字符串属性.Where("ORDER_DETAILS.Any(PRODUCTS.HEADING.ToLower().Contains(\"foo\"))")
的类,那么以下应该可以做到这一点:
.Where(o => o.ORDER_DETAILS.Any(d => d.PRODUCTS.HEADING.ToLower().Contains("foo")))
它与跳过lambda参数的静态查询基本相同
ROWID
答案 1 :(得分:0)
问题是ORDER_DETAILS是一个列表,每个订单明细都有一个产品列表?这就是您收到错误消息的原因。为了从ORDER_DETAILS获取产品,您需要遍历它并从每个元素中获取产品。
您可以尝试:
var orders = _uow.Repository<ORDERS>()
.Query()
.Where("PRODUCTS.HEADING.ToLower().Contains(\"foo\")")
.Include(x=>x.ORDER_DETAILS.Select(y => y.PRODUCTS));
现在看来你遇到了this question中描述的问题。希望它现在运作良好。