【】LINQ GROUP 查询中 WHERE条件的动态拼接有关问题

【高手指点】LINQ GROUP 查询中 WHERE条件的动态拼接问题
本帖最后由 yongwuxin 于 2015-03-11 12:02:50 编辑
下面的LINQ  中 WHERE 条件中 有3个条件  这3个条件不是必须的,如果某个条件的值为0 应该取消这个条件  我尝试了多次,不知道如何能够实现动态
( 比如以前 可以用 
if(id!=0)
   querey = query.where(m=>m.id == id)
 )

但是 当前查询我没能实现。


请看的懂的高手指点一下




            var query = from gift in this.Entities
                        join giftHoliday in GiftWithHolidayDB.Entities on gift.ID equals giftHoliday.Gift_ID into join_holiday
                        from jh in join_holiday.DefaultIfEmpty()

                        join giftTarget in GiftWithTargetDB.Entities on gift.ID equals giftTarget.Gift_ID into join_target
                        from jt in join_target.DefaultIfEmpty()

                        join giftCategory in GiftWithCategoryDB.Entities on gift.ID equals giftCategory.Gift_ID into join_category
                        from jc in join_category.DefaultIfEmpty()

                        where jh.Holiday_ID == holiday_ID && jt.GiftTarget_ID == giftTarget_ID && jc.GiftCategory_ID == giftCategory_ID

                        
                        group gift by new
                        {
                            ID = gift.ID,
                            Introduction = gift.Introduction,
                            Price = gift.Price,
                            Name = gift.Name
                        } into groupGift

                        select new
                        {
                            ID = groupGift.Key.ID,
                            Introduction = groupGift.Key.Introduction,
                            Price = groupGift.Key.Price,
                            Name = groupGift.Key.Name
                        };

------解决思路----------------------
try this:
  var query = from gift in this.Entities
                        join giftHoliday in GiftWithHolidayDB.Entities on gift.ID equals giftHoliday.Gift_ID into join_holiday
                        from jh in join_holiday.DefaultIfEmpty()
  where holiday_ID>0?jh.Holiday_ID == holiday_ID:true
                        join giftTarget in GiftWithTargetDB.Entities on gift.ID equals giftTarget.Gift_ID into join_target
                        from jt in join_target.DefaultIfEmpty()
   where giftTarget_ID>0?jt.GiftTarget_ID == giftTarget_ID:true
                        join giftCategory in GiftWithCategoryDB.Entities on gift.ID equals giftCategory.Gift_ID into join_category
                        from jc in join_category.DefaultIfEmpty()
   where giftCategory_ID>0?jjc.GiftCategory_ID == giftCategory_ID:true
                         
                        group gift by new
                        {
                            ID = gift.ID,
                            Introduction = gift.Introduction,
                            Price = gift.Price,
                            Name = gift.Name
                        } into groupGift
 
                        select new
                        {
                            ID = groupGift.Key.ID,
                            Introduction = groupGift.Key.Introduction,
                            Price = groupGift.Key.Price,
                            Name = groupGift.Key.Name
                        };

------解决思路----------------------
人家用的是join,你不要光看见3个where

你在一个条件里写逻辑与,那不是任何一个如果是false,就3个条件都判断为不满足了吗