LinqToSql 动态查询条件,join, isnull 综合示例

LinqToSql 出来好久了. 一直没怎么用过这种写法.. 最近项目既要支持orcale 又要支持SqlServer.
涉及到跨数据库, 就尽量不要执行原生的SQL, EF默认对join也是支持的, 就是不太好写.
选来选去,还是选择了使用 LinqToSql的形式实现 join .

  var hisFeeItemFiltered = DB.Set<HisFeeItem>().AsQueryable();

             if (! string.IsNullOrWhiteSpace(filter))
             {
             //动态添加查询条件
                hisFeeItemFiltered = hisFeeItemFiltered.Where(a=>a.HItemName.Contains(filter) || a.NameAB.Contains(filter));
             }


             var data = 
                (
                from a in hisFeeItemFiltered
                join b in DB.Set<WHisFeeItemFavorite>().Where(a=>a.HospitalCode == HospitalCode && a.UserID == user ) on a.Code equals b.FeeItemCode 
                //into temp 
                //from t in temp 
                orderby b.FavoriteNum descending 
                select new
                { 
                    FavoriteNum = (b.FavoriteNum == null ? 0 : b.FavoriteNum ),  //isnull 示例
                    a.Code,
                    a.CreateDate,
                    a.Creator,
                    a.Description,
                    a.HItemCode,
                    a.HItemName,
                    a.Id,
                }
                ).ToList();

下面是改成left join 的写法..

             var hisFeeItemFiltered = DB.Set<HisFeeItem>().AsQueryable();

             if (! string.IsNullOrWhiteSpace(filter))
             {
                hisFeeItemFiltered = hisFeeItemFiltered.Where(a=>a.HItemName.Contains(filter) || a.NameAB.Contains(filter));
             }


             var data = 
                (
                from a in hisFeeItemFiltered
                join b in DB.Set<WHisFeeItemFavorite>().Where(a=>a.HospitalCode == HospitalCode && a.UserID == user )  on a.Code equals b.FeeItemCode 
                into temp  //left join 必须建立在这个表上
                from t in temp.DefaultIfEmpty()//left join  
                orderby t.FavoriteNum descending 
                select new
                { 
                    FavoriteNum = (t.FavoriteNum == null ? 0 : t.FavoriteNum ), 
                    a.Code,
                    a.CreateDate,
                    a.Creator,
                    a.Description,
                    a.HItemCode,
                    a.HItemName,
                    a.Id,
                }
                ).ToList();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值