Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
是否可以在Linq中按方法分组使用方法?_Linq_Asp.net Core 3.1 - Fatal编程技术网

是否可以在Linq中按方法分组使用方法?

是否可以在Linq中按方法分组使用方法?,linq,asp.net-core-3.1,Linq,Asp.net Core 3.1,我正在尝试按自定义方法分组。例如,如果组id是某物,那么我想从GetClientGroup的方法返回1或0,然后我想按值分组。但我得到了这样的错误 错误 无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算。有关更多信息,请参阅 我认为这个错误是在运行时出现的,而不是在编译时。我说得对吗 IEnumerable和iquierable 您应该知道IEnum

我正在尝试按自定义方法分组。例如,如果组id是某物,那么我想从
GetClientGroup
的方法返回1或0,然后我想按值分组。但我得到了这样的错误

错误

无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()、AsAsAsAsyncEnumerable()、ToList()或ToListSync()的调用显式切换到客户端计算。有关更多信息,请参阅


我认为这个错误是在运行时出现的,而不是在编译时。我说得对吗

IEnumerable和iquierable 您应该知道
IEnumerable
IQueryable
之间的区别

实现
IEnumerable
IQueryable
的对象表示潜在的,以提供可枚举序列。一旦你有了序列,你可以要求第一个元素,一旦你有了这个,你可以要求下一个元素,只要有一个元素

这种对元素的迭代通常使用
foreach(序列中的var元素){…}
完成。这可转化为以下内容:

IEnumerable<MyType> sequence = ...                          // the potential to get iterator
IEnumerator<MyType> enumerator = sequence.GetEnumerator();  // get the iterator

while (enumerator.MoveNext())                               // iterate
{                                                           // as long as there are items
     MyType item = enumerator.Current;                      // fetch the item
     ProcessItem(item);                                     // and process it.
}
唉,你忘了写GetClientGroup做什么了。它似乎接受订单的ClienteleId和GroupId,并返回一个类似于ClientGroup的整数

最简单的方法是用该方法中的代码替换对GetClientGroup的调用不要调用任何其他方法

DateTime deliveryLimitDate = new DateTime(2020, 06, 29).Date;
var result = dbContext.Orders
    .Where (order => order.ClienteleId == clienteleId
                  && order.DeliveryDate != null
                  && order.DeliveryDate >= deliveryLimitDate)
    .GroupBy(order => new                                 // Parameter KeySelector
    {
         ClienteleId = order.ClienteleId,
         DeliveryDate = order.DeliveryDate,
         ClientGroup= order.OrderTypeId == 22 ? 259 :
             
                  // formula in GetClientGroup(...)
                  // for example
                  (int)order.GroupId << 16 + order.ClienteleId

         // parameter ResultSelector
         group => new { ClienteleId = group.Key.ClienteleId});

唉,因为我不知道你的GetClientGroup,所以我不能给你参数KeySelector

错误消息很清楚,
GetClientGroup
自定义方法无法转换为SQL。那是什么方法?顺便说一句,正如错误所说,您可以检索数据,然后将其分组到内存中。
Expression<Func<TSource,TKey>> keySelector
DateTime deliveryLimitDate = new DateTime(2020, 06, 29).Date;
var result = dbContext.Orders
    .Where (order => order.ClienteleId == clienteleId
                  && order.DeliveryDate != null
                  && order.DeliveryDate >= deliveryLimitDate)
    .GroupBy(order => new                                 // Parameter KeySelector
    {
         ClienteleId = order.ClienteleId,
         DeliveryDate = order.DeliveryDate,
         ClientGroup= order.OrderTypeId == 22 ? 259 :
             
                  // formula in GetClientGroup(...)
                  // for example
                  (int)order.GroupId << 16 + order.ClienteleId

         // parameter ResultSelector
         group => new { ClienteleId = group.Key.ClienteleId});
         // parameter ResultSelector
         group => group.Key.ClienteleId});