加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – LINQ to Entities无法识别方法异常

发布时间:2020-12-15 20:39:55 所属栏目:asp.Net 来源:网络整理
导读:我有这样的事情 SecuritySearcher sc = new SecuritySearcher();Dictionarystring,bool groupsMap = sc.GetUserGroupMappings(domainName,currentUser,distGroups.ToList());IQueryableHotelTravel groupq = (from hotel in qHs join hp in qHps on hotel.Ho
我有这样的事情
SecuritySearcher sc = new SecuritySearcher();
Dictionary<string,bool> groupsMap = 
    sc.GetUserGroupMappings(domainName,currentUser,distGroups.ToList());

IQueryable<HotelTravel> groupq = 
    (from hotel in qHs
    join hp in qHps on hotel.HotelTravelId equals hp.HotelTravelId
    where !string.IsNullOrEmpty(hp.GroupName)
       && groupsMap.ContainsKey(hp.GroupName) 
       && groupsMap[hp.GroupName] == true
    select hotel);

在执行Linq语句时,它正在抛出异常说法
LINQ to Entities无法识别方法’Boolean ContainsKey(System.String)’方法,并且此方法无法转换为商店表达式.

解决方法

为了将表达式转换为数据库查询,数据库必须以某种方式知道字典的内容并有办法从查询中访问它. SQL中没有字典机制,但这并不重要,因为您不需要字典,因为您只是在寻找值为某个常量的键.您可以将该组密钥转换为列表,并查看该列表是否包含您要查找的内容:
var groupsList = (from kvp in groupsMap     // find all keys in groupsMap
                  where kvp.Value == true   // where the value is set to True
                  select kvp.Key).ToList();

IQueryable<HotelTravel> groupq =
    from hotel in qHs
    join hp in qHps on hotel.HotelTravelId equals hp.HotelTravelId
    where !string.IsNullOrEmpty(hp.GroupName)
          && groupsList.Contains(hp.GroupName)
    select hotel;

我怀疑你实际上并没有将空字符串作为字典中的键,这意味着你可以摆脱IsNullOrEmpty调用,只需要在groupsList.Contains(hp.GroupName)中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读