如何使用Linq to实体构建用于匹配两个查询的自定义键

如何使用Linq to实体构建用于匹配两个查询的自定义键,linq,casting,linq-to-entities,key,Linq,Casting,Linq To Entities,Key,我希望将内存中的实体与DB表中的数据相匹配,并返回一个新的内存中DTO,其中包含匹配信息的子集。现在,匹配涉及两列,因此我正在动态构建一个新键。这是可行的,只要我在构建键之前执行查询,就可以有效地使用Linq To对象进行匹配 如果不立即执行查询,我会收到一个运行时异常,如下所述 这是我的代码和数据模型,简化了。我有 房间(作为IEnumerable,已在内存中) 区域(如IEnumerable,已在内存中) 报警(来自数据库,如上下文中的IQueryable) 警报与区域和位置ID关联。房

我希望将内存中的实体与DB表中的数据相匹配,并返回一个新的内存中DTO,其中包含匹配信息的子集。现在,匹配涉及两列,因此我正在动态构建一个新键。这是可行的,只要我在构建键之前执行查询,就可以有效地使用Linq To对象进行匹配

如果不立即执行查询,我会收到一个运行时异常,如下所述

这是我的代码和数据模型,简化了。我有

  • 房间(作为
    IEnumerable
    ,已在内存中)
  • 区域(如
    IEnumerable
    ,已在内存中)
  • 报警(来自数据库,如上下文中的IQueryable)
警报与区域和位置ID关联。房间可以有多个区域,并且有一个LocationId

我想建立一组发生在一组房间中的警报。这涉及到将报警器的区域和位置SID与每个房间的位置ID和区域相匹配

from area in allAreas
let alarmKey = area.AreaName + area.Room.LocationId //AreaName is String, LocationId is integer
//....

但是,此行涉及不支持的强制转换形式int-to-String如何创建密钥?

如果您不介意在
LocationId
中有许多前导空格,您可以这样做

let alarmKey = area.AreaName + 
               SqlFunctions.StringConvert((double)area.Room.LocationId)
位于
System.Data.Objects.SqlClient