【问题标题】:Is this linq query efficient?这个 linq 查询有效吗?
【发布时间】:2011-07-23 11:29:36
【问题描述】:

这个 linq 查询效率高吗?

    var qry = ((from member in this.ObjectContext.TreeMembers.Where(m => m.UserId == userId && m.Birthdate == null)
              select member.TreeMemberId).Except(from item in this.ObjectContext.FamilyEvents select item.TreeMemberId));


    var mainQry = from mainMember in this.ObjectContext.TreeMembers
                  where qry.Contains(mainMember.TreeMemberId)
                  select mainMember;

这会被翻译成多个 sql 调用还是一个?可以优化吗?基本上我有 2 个表,我想从 table1 中选择那些 datetime 为空且该记录不应该存在于 table2 中的记录。

【问题讨论】:

  • 为什么不执行一下看看?
  • 我讨厌人们将 StackOverflow 视为他们个人的人工编译器。
  • @Martinho Fernandes :- +1。阅读您的评论后,我会说部分您是对的。感谢您通知我。

标签: linq


【解决方案1】:

确定查询是否会进行多次调用的最简单方法是设置数据上下文的.Log 属性。我通常将其设置为写入DebugOutputWriter。可以在here 找到此类类的一个很好的示例。

但是,对于一般的思考方式,如果您使用的类的属性不直接映射到 where 子句或 join 子句中的数据库字段,它通常会进行多次调用。从您提供的内容来看,您的情况似乎不是,但我不能绝对确定并建议使用上面列出的方法。

【讨论】:

  • -哇!关于未映射到数据库的自定义属性的好答案和好技巧。是的,你写的是我的情况不是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2020-12-04
相关资源
最近更新 更多