C#LINQ to Entities无法识别方法TryGetValue

时间:2017-10-07 11:50:21

标签: c# sql linq

我知道很多与此错误相关的问题,但我无法找到一种方法来转换我的查询以满足我的查询。我的错误:'LINQ to Entities does not recognize the method 'Boolean TryGetValue(Int32, System.Collections.Generic.List 1 [System.Nullable 1[System.Int32]] ByRef)' method, and this method cannot be translated into a store expression.' 我的思绪正在融化!

var groupedKeyAndValueOfProjectIdAndZoneIds = groupedProjectDelegationByProjectId.ToDictionary(keySelector: x => x.ProjectId, elementSelector: x => x.ZoneIds);

...

var data = projects
                        .Select(p => new Project
                        {
                            Id = p.Id,
                            ProjectName = p.Name,
                            Zones = p.Zones.Where(z =>
                              (zoneIds.Contains(z.Id) || (groupedKeyAndValueOfProjectIdAndZoneIds.TryGetValue(p.Id, out outValue) ? outValue.Contains(z.Id) : false)))

... 鉴于groupsKeyAndValueOfProjectAndZones是Dictionary<int, List<int>>。 请帮我。

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您正在尝试将两个数据源混合在一起。在引擎盖下LINQ to Entities想要获取您在LINQ中表达的表达式并将其转换为SQL查询。换句话说,当您在LINQ中编写select时,您将在SQL中获得1:1映射。当你按照groupedKeyAndValueOfProjectAndZones的方式抛出数据字典时,LINQ to Entities不知道如何将其表示为一个没有等效运行SQL的内存数据源。

要解决此问题,您需要将groupedKeyAndValueOfProjectAndZones中包含的数据移动到数据库中并从那里进行查询,或者您需要在LINQ to Entities查询后提供您正在进行的过滤