gpt4 book ai didi

c# - Expression.Call - 调用 linq 扩展 : FirstOrDefault, 其中

转载 作者:太空狗 更新时间:2023-10-29 21:07:04 24 4
gpt4 key购买 nike

我正在尝试动态创建以下内容,但是我在调​​用扩展方法 FirstOrDefault 时遇到问题:

 using(var context = new Entities())
{
var list = context.Engines.Include("Cars").Select(e => e.Cars.FirstOrDefault()).ToList();
}

我有以下内容

Expression parameter = Expression.Parameter(typeof(Engine), "e");
Expression property = Expression.Property(parameter, "Cars");
  • 参数 = {e}
  • property = {e.Cars}

这些很好,但是当我尝试调用 FirstOrDefault 方法时遇到问题:

var result = Expression.Call(typeof(Queryable), "FirstOrDefault", new type[] { typeof(Car)}, property);

我想得到

  • result = {e.Cars.FirstOrDefault()}

但我得到了一个InvalidOperationException

No generic method 'FirstOrDefault' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.

如有任何帮助,我们将不胜感激。

最佳答案

你确定 e.CarsIQueryable<T>

如果不是,则无法将其传递给 Queryable.FirstOrDefault<T>(IQueryable<T>) .

如果它是 IEnumerable<T> , 更改您的代码以调用 Enumerable.FirstOrDefault<T>(IEnumerable<T>) :

 var result =
Expression.Call(
typeof(Enumerable),
"FirstOrDefault",
new Type[] { TypeSystem.GetElementType(property.Type) },
property);

关于c# - Expression.Call - 调用 linq 扩展 : FirstOrDefault, 其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com