Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从用法推断类型参数,有人能帮忙吗?_C#_Linq_Compiler Errors_Linq To Objects_Dynamic Linq - Fatal编程技术网

C# 无法从用法推断类型参数,有人能帮忙吗?

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

我试图使用动态Linq(ScottGu发布的那个)来做一个GroupBy(lambda表达式)。我有一个目标。而我正在做的是AsQueryable。这就是我所拥有的

var result = Items.AsQueryable().GroupBy("DeliveryDate");
但它给了我一个错误,即不能从用法推断参数。我认为它没有看到正确的订货人

项目是一个
列表

我尝试将<>添加到
GroupBy
,但我认为我需要传递多个项目。我有点困惑

我正在传递的字段(通过字符串)可以是任何类型,在本例中是DateTime

如果我用我的标准LINQ,它就行了。i、 e:

var result = Items.AsQueryable().GroupBy( x => x.DeliveryDate);
以下是扩展方法(来自ScottGu):

我在项目中使用了
using System.Linq.Dynamic-我正在另一种方法中使用dynamic
OrderBy
,所以我知道它应该能够看到它


我有点困惑,它似乎在使用动态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);