【问题标题】:nhibernate to linq 3.2 generate error sql on || operatornhibernate to linq 3.2 在 || 上生成错误 sql操作员
【发布时间】:2011-09-21 16:40:58
【问题描述】:

现在我使用 nhibernate 3.2 作为 orm,当我编写这样的代码时:

PostReaderBll postReaderBll=new PostReaderBll();
    var query = from p in postReaderBll.Query()
                where (p.Post.Flag == (int)PostType.Post && p.Post.MailState == (int)MailState.Normal) || (p.ReceiveUser == LoginUser.UserIdentity && p.Post.Flag == (int)PostType.Mail && p.Post.MailState == (int)APSP.Form.MailState.Normal)
                select p;

我得到了这个 sql:

SELECT   TOP ( 10 /* @p0 */ ) ID1_70_,
                 IsRead2_70_,
                 ReceiveU3_70_,
                 ReadDate4_70_,
                 Flag5_70_,
                 Label6_70_,
                 PostID7_70_   FROM     (select postreader0_.[ID]     as ID1_70_,
             postreader0_.[IsRead]              as IsRead2_70_,
             postreader0_.[ReceiveUser]         as ReceiveU3_70_,
             postreader0_.[ReadDate]            as ReadDate4_70_,
             postreader0_.[Flag]                as Flag5_70_,
             postreader0_.[Label]               as Label6_70_,
             postreader0_.[PostID]              as PostID7_70_,      ROW_NUMBER()
               OVER(ORDER BY CURRENT_TIMESTAMP) as __hibernate_sort_row
      from   PostReader postreader0_
             inner join Post post1_
               on postreader0_.[PostID] = post1_.[ID]
      where  post1_.[Flag] = 1 /* @p1 */
             and post1_.[MailState] = 0 /* @p2 */
              or postreader0_.[ReceiveUser] = 'admin' /* @p3 */
                 and post1_.[Flag] = 0 /* @p4 */
                 and post1_.[MailState] = 0 /* @p5 */) as query   WHERE   query.__hibernate_sort_row > 0 /* @p6 */  ORDER BY query.__hibernate_sort_row

但我需要这样的地方:

( post1_.[Flag] = 1 /* @p1 */
             and post1_.[MailState] = 0 /* @p2 */)
              or (postreader0_.[ReceiveUser] = 'admin' /* @p3 */
                 and post1_.[Flag] = 0 /* @p4 */
                 and post1_.[MailState] = 0 /* @p5 */)

【问题讨论】:

    标签: linq nhibernate orm


    【解决方案1】:

    这是一样的,因为 OR 运算符总是在 AND 运算符之后进行计算。

    OR 运算符的参考文档:

    结合两个条件。使用多个逻辑运算符时 在语句中,OR 运算符在 AND 运算符之后进行计算。 但是,您可以使用括号更改计算顺序。

    http://msdn.microsoft.com/en-us/library/ms188361.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2010-10-05
      • 2011-05-12
      相关资源
      最近更新 更多