【问题标题】:LINQ - CASE statement in WHERE clauseLINQ - WHERE 子句中的 CASE 语句
【发布时间】:2011-12-02 12:25:15
【问题描述】:

我对 LINQ 很陌生。我有一个下面的 linq 查询

var entities = context.MessagingTemplateEntities
                      .Where(m => 
                          m.PartyId == partyId && 
                          m.MessageTemplateTypeId == messagingTemplateTypeId &&
                          m.ProductTypePartyId == productTypePartyId);

在此查询中,如果 productTypePartyId 为 0,那么我不想将其包含在 && 条件中。那么如何根据值排除参数呢?

【问题讨论】:

    标签: asp.net linq linq-to-entities


    【解决方案1】:

    不知道为什么人们总是强迫 LINQ 成为一个衬垫。

    var entities = context.MessagingTemplateEntities
                          .Where(m => 
                              m.PartyId == partyId && 
                              m.MessageTemplateTypeId == messagingTemplateTypeId);
    
    if(productTypePartyId != 0)
       entities = entites.Where(m.ProductTypePartyId == productTypePartyId);
    

    自己决定哪个更易读。

    【讨论】:

      【解决方案2】:
      var entities = context.MessagingTemplateEntities
                            .Where(m =>
                                m.PartyId == partyId && 
                                m.MessageTemplateTypeId == messagingTemplateTypeId &&
                                (productTypePartyId == 0 ? 
                                    true : 
                                    m.ProductTypePartyId == productTypePartyId));
      

      【讨论】:

        【解决方案3】:

        使用&& (m.ProductTypePartyId == productTypePartyId || productTypePartyId == 0) 而不是&& m.ProductTypePartyId == productTypePartyId

        【讨论】:

        • productTypePartyId 为 0 时不起作用,会在 AND 条件下添加,由于表中没有 productTypePartyId=0 的记录,所以会返回空实体。
        • 抱歉,打错字了。编辑了我的答案 - 从第二个子句中删除了 m.
        猜你喜欢
        • 1970-01-01
        • 2014-09-08
        • 2020-03-26
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多