LINQ to Entities无法识别该方法

ujj*_*val 2 .net c# linq linq-to-entities entity-framework

这是我获取数据的代码.

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()
                               });
Run Code Online (Sandbox Code Playgroud)

现在这是我的扩展.

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;
        }
Run Code Online (Sandbox Code Playgroud)

我已经检查过这个帖子LINQ to Entities无法识别该方法

我知道我需要使用

public System.Linq.Expressions.Expression<Func<Row52.Data.Entities.User, int>> GetPullerRatingtest
Run Code Online (Sandbox Code Playgroud)

但是怎么样?谢谢

luc*_*cas 5

您可以在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
Run Code Online (Sandbox Code Playgroud)

这将由服务器计算,并作为列表的一部分返回.虽然像你说的那样有1000万行,但在执行之前我会做一些严肃的过滤.