我正在尝试使用linq从视图中获取项目列表,其中字段LocationId是值或为null。字段LocationId是int?。
我正在尝试的代码是这样的:
var items = _context.Items.Where(
d => d.LocationId == null || d.LocationId == query.Location).ToList();
不幸的是,正如SqlProfiler所见,生成的sql不包含d.LocationId == null。
与可能重复的问题的不同之处在于,只检查值的值为null。我想要的是SELECT * FROM Items WHERE LocationId = @some_param或LocationId IS NULL。
编辑:在映射不正确的评论后,我发现了问题。 映射类似于
HasKey(x => new { x.EquipmentId, x.LocationId});
因为这一切都来自一个观点。 看起来如果LINQ将属性视为键的一部分,它会认为它是不可为空的,如果属性可以为空则无关紧要(int?)
答案 0 :(得分:1)
映射错误。从HasKey映射中删除了LocationId。
看起来如果LINQ将属性视为键的一部分,它会认为它是不可为空的,如果属性可以为空则无关紧要(int?)