Linq.Dynamic FirstOrDefault() 嵌套在 OrderBy 中
Linq.Dynamic FirstOrDefault() nested in OrderBy
我有以下 Linq 语句,它工作得很好:
query = query.OrderBy(m => m.MATERIAL_TXT.Where(mt => mt.LANG == "EN").FirstOrDefault().LTEXT);
现在我试图通过使用来自 Linq.Dynamic:
的基于字符串的语法使其动态化
query = query.OrderBy("MATERIAL_TXT.Where(LANG==\"EN\").FirstOrDefault().LTEXT");
但是它抛出异常:
"No applicable aggregate method 'FirstOrDefault' exists"
它必须是动态的,以便它接受其他名称而不是 "MATERIAL_TXT"。
我错过了什么?
根据文档:
A subset of the Standard Query Operators is supported for objects that implement IEnumerable. Specifically, the following constructs are permitted, where seq is an IEnumerable instance, predicate is a boolean expression, and selector is an expression of any type:
- seq.Where(predicate)
- seq.Any()
- seq.Any(predicate)
- seq.All(predicate)
- seq.Count()
- seq.Count(predicate)
- seq.Min(selector)
- seq.Max(selector)
- seq.Sum(selector)
- seq.Average(selector)
FirstOrDefault
不在列表中,因此可以合理地假设它不受支持。
您不能像那样将 FirstOrDefault 用作字符串。
如果你想创建动态 orderBy 试试这个:
Func<IQueryable<YourEntityType>, IOrderedQueryable<YourEntityType>> orderBy;
orderBy = x => x.OrderBy(m => m.MATERIAL_TXT.Where(mt => mt.LANG == "EN").FirstOrDefault().LTEXT);
那你就可以这样使用了:
orderBy(query);
例如,您可以在另一种方法中使用它:
public List<YourEntityType> YourMethodName(Func<IQueryable<YourEntityType>, IOrderedQueryable<YourEntityType>> orderBy,IQueryable<YourEntityType> query=null)
{
query=query ?? GetYourEntityTypeList().AsQueryable();
return orderBy(query).ToList();
}
希望有用。
我有以下 Linq 语句,它工作得很好:
query = query.OrderBy(m => m.MATERIAL_TXT.Where(mt => mt.LANG == "EN").FirstOrDefault().LTEXT);
现在我试图通过使用来自 Linq.Dynamic:
的基于字符串的语法使其动态化query = query.OrderBy("MATERIAL_TXT.Where(LANG==\"EN\").FirstOrDefault().LTEXT");
但是它抛出异常:
"No applicable aggregate method 'FirstOrDefault' exists"
它必须是动态的,以便它接受其他名称而不是 "MATERIAL_TXT"。
我错过了什么?
根据文档:
A subset of the Standard Query Operators is supported for objects that implement IEnumerable. Specifically, the following constructs are permitted, where seq is an IEnumerable instance, predicate is a boolean expression, and selector is an expression of any type:
- seq.Where(predicate)
- seq.Any()
- seq.Any(predicate)
- seq.All(predicate)
- seq.Count()
- seq.Count(predicate)
- seq.Min(selector)
- seq.Max(selector)
- seq.Sum(selector)
- seq.Average(selector)
FirstOrDefault
不在列表中,因此可以合理地假设它不受支持。
您不能像那样将 FirstOrDefault 用作字符串。
如果你想创建动态 orderBy 试试这个:
Func<IQueryable<YourEntityType>, IOrderedQueryable<YourEntityType>> orderBy;
orderBy = x => x.OrderBy(m => m.MATERIAL_TXT.Where(mt => mt.LANG == "EN").FirstOrDefault().LTEXT);
那你就可以这样使用了:
orderBy(query);
例如,您可以在另一种方法中使用它:
public List<YourEntityType> YourMethodName(Func<IQueryable<YourEntityType>, IOrderedQueryable<YourEntityType>> orderBy,IQueryable<YourEntityType> query=null)
{
query=query ?? GetYourEntityTypeList().AsQueryable();
return orderBy(query).ToList();
}
希望有用。