我第一次使用LINQ和EF。我设计了一个db,它通过多个名为“DeveloperMatchesProfile”的实体将Developer实体与SkillProfile实体相链接。
我遇到的问题是我的LINQ查询(依赖于使用原始范围变量的导航属性)需要一个额外的Where子句。这看起来很快就会变得低效。有没有更好的办法?这种结构会对性能构成威胁吗?
答案 0 :(得分:3)
为什么不做这样的事情?
var skills = _Context.DeveloperMatchesProfiles
.Where(x => x.DeveloperId == developerId)
.Select(x => x.SkillProfile);
您只需使用该开发者ID选择DeveloperMatchProfiles的实例,然后选择链接的导航属性。如果我理解你的关系,你基本上会倒退。
答案 1 :(得分:2)
此构造是否会对性能构成威胁?
没有办法知道没有获取生成的实际sql,并查看执行计划,执行时间和IO。
有更好的方法吗?
我可以建议在测试存在时使用.Any()
而不是.Count()
吗?
_Context.SkillProfiles.Where(
p => p.DeveloperMatchesProfiles.Any(d => d.DeveloperId == developerId)
);