如何避免在LINQ中编写Where()运算符?

时间:2011-08-25 16:59:55

标签: linq entity-framework-4 entity-framework-4.1

我第一次使用LINQ和EF。我设计了一个db,它通过多个名为“DeveloperMatchesProfile”的实体将Developer实体与SkillProfile实体相链接。

我遇到的问题是我的LINQ查询(依赖于使用原始范围变量的导航属性)需要一个额外的Where子句。这看起来很快就会变得低效。有没有更好的办法?这种结构会对性能构成威胁吗?

My Entities

My Query

2 个答案:

答案 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)
);
相关问题