您的位置:首页 > 编程语言 > Qt开发

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

2017-08-15 16:56 671 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: