C# 无法从用法推断类型参数,有人能帮忙吗?
我试图使用动态Linq(ScottGu发布的那个)来做一个GroupBy(lambda表达式)。我有一个目标。而我正在做的是AsQueryable。这就是我所拥有的C# 无法从用法推断类型参数,有人能帮忙吗?,c#,linq,compiler-errors,linq-to-objects,dynamic-linq,C#,Linq,Compiler Errors,Linq To Objects,Dynamic Linq,我试图使用动态Linq(ScottGu发布的那个)来做一个GroupBy(lambda表达式)。我有一个目标。而我正在做的是AsQueryable。这就是我所拥有的 var result = Items.AsQueryable().GroupBy("DeliveryDate"); 但它给了我一个错误,即不能从用法推断参数。我认为它没有看到正确的订货人 项目是一个列表 我尝试将添加到GroupBy,但我认为我需要传递多个项目。我有点困惑 我正在传递的字段(通过字符串)可以是任何类型,在本例中是D
var result = Items.AsQueryable().GroupBy("DeliveryDate");
但它给了我一个错误,即不能从用法推断参数。我认为它没有看到正确的订货人
项目是一个列表
我尝试将<>添加到GroupBy
,但我认为我需要传递多个项目。我有点困惑
我正在传递的字段(通过字符串)可以是任何类型,在本例中是DateTime
如果我用我的标准LINQ,它就行了。i、 e:
var result = Items.AsQueryable().GroupBy( x => x.DeliveryDate);
以下是扩展方法(来自ScottGu):
我在项目中使用了using System.Linq.Dynamic代码>-我正在另一种方法中使用dynamicOrderBy
,所以我知道它应该能够看到它
我有点困惑,它似乎在使用动态LINQ,它不明白我在使用什么对象。具有此签名的扩展方法
public static IQueryable GroupBy(this IQueryable source,
string keySelector, string elementSelector, params object[] values)
此行未调用
var result = Items.AsQueryable().GroupBy("DeliveryDate");
因为只有一个非
这个参数!因此,编译器认为您在寻找常规的GroupBy
(需要Func
)并感到困惑
您需要提供另一个选择器
字符串
编辑以添加
正常的GroupBy
具有,因此动态Linq需要提供同样多的灵活性GroupBy
生成一系列分组,每个分组都有一个键和一系列元素。如果像在常规LINQ调用中一样,没有提到元素,则源对象本身将用作元素
例如,使用一些假设类,按OrderDate
对Orders
进行分组,生成一个IEnumerable
但是我们可以说,我们只关心输出中的OrderId
,因此我们可以给GroupBy
一个elementSelector
,使其生成一个IEnumerable
为了告诉Dynamic Linq使用项本身作为元素,我们使用神奇字符串“it”
作为元素选择器
:
var result = Items.AsQueryable().GroupBy("DeliveryDate", "it");
这将产生与传统LINQ调用相同的效果
var result = Items.AsQueryable().GroupBy(i => i.DeliveryDate);
谢谢是的,它似乎在工作!非常感谢你。所以我需要用两个字符串传递什么呢?什么是键选择器和元素选择器?选择键=交货日期??什么是元素选择器?@abatishchev与实体框架最终使用它的原因相同-这是一个很好的引用“当前未命名参数”的简短方式。它是@AakashM:看来这是Expression.Parameter的硬编码值(typeof(T),“It”)代码>,不是吗?@abatishchev基本上是的,虽然有特殊的大小写将“it”
映射到一个未命名的参数,但这是唯一的参数。@AakashM:谢谢你的澄清,同样问题的另一个类似解决方案也请参见
var result = Items.AsQueryable().GroupBy(i => i.DeliveryDate);