LINQ - WHERE子句中的CASE语句

时间:2011-12-02 12:25:15

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

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

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

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

3 个答案:

答案 0 :(得分:5)

不确定为什么人们总是强迫LINQ成为一个衬里。

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

if(productTypePartyId != 0)
   entities = entites.Where(m.ProductTypePartyId == productTypePartyId);

自己决定一目了然的可读性。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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