c# - LINQ to Entities 无法识别该方法

标签 c# .net linq entity-framework linq-to-entities

这是我获取数据的代码。

var list = (from u in _dbContext.Users
                        where u.IsActive
                              && u.IsVisible
                              && u.IsPuller.HasValue
                              && u.IsPuller.Value
                        select new PartsPullerUsers
                               {
                                   AvatarCroppedAbsolutePath = u.AvatarCroppedAbsolutePath,
                                   Bio = u.Bio,
                                   CreateDateTime = u.CreationDate,
                                   Id = u.Id,
                                   ModifieDateTime = u.LastModificationDate,
                                   ReviewCount = u.ReviewsReceived.Count(review => review.IsActive && review.IsVisible),
                                   UserName = u.UserName,
                                   Locations = (from ul in _dbContext.UserLocationRelationships
                                                join l in _dbContext.Locations on ul.LocationId equals l.Id
                                                where ul.IsActive && ul.UserId == u.Id
                                                select new PartsPullerLocation
                                                       {
                                                           LocationId = ul.LocationId,
                                                           Name = ul.Location.Name
                                                       }),
                                   Rating = u.GetPullerRating()
                               });

现在这是我的扩展。

public static int GetPullerRating(this User source)
        {
            var reviewCount = source.ReviewsReceived.Count(r => r.IsActive && r.IsVisible);
            if (reviewCount == 0)
                return 0;

            var totalSum = source.ReviewsReceived.Where(r => r.IsActive && r.IsVisible).Sum(r => r.Rating);
            var averageRating = totalSum / reviewCount;

            return averageRating;
        }

我已经查看了这篇文章LINQ to Entities does not recognize the method

我开始知道我需要使用

public System.Linq.Expressions.Expression<Func<Row52.Data.Entities.User, int>> GetPullerRatingtest

但是怎么办? 谢谢

最佳答案

您可以在 LINQ to Entity 查询中使用条件:

AverageRating = u.ReviewsReceived.Count(r => r.IsActive && r.IsVisible) > 0 ? 
                u.ReviewsReceived.Where(r => r.IsActive && r.IsVisible).Sum(r => r.Rating) / 
                u.ReviewsReceived.Count(r => r.IsActive && r.IsVisible)
                : 0

这将由服务器计算,并作为列表的一部分返回。尽管像你说的那样有 1000 万行,但我会在执行此操作之前进行一些严格的过滤。

关于c# - LINQ to Entities 无法识别该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621992/

相关文章:

c# - 重构具有不同属性的相同循环

c# - 用大写字母拆分字符串

c# - 使用 Linq.Expressions.Expression 排序

c# - 使用 lambda 查询获取前 5 个值

c# - LINQ 一对多,3 级深度问题

c# - 在 C# 类中获取屏幕分辨率(无表单/wpf/aps.net/...)

c# - LINQ 中多个左连接的正确语法?

c# - .NET HttpClient - 当响应头的 Content-Length 不正确时接受部分响应

c# - 空值和空白值

c# - 从数据库获取值(value)到 Linq where 子句