[手工转载]Entity Framewor 实现 (include + where)条件过滤

如果我们想在子查询做过滤的话应该怎样写呢?

IEnumerable<Product> products = db.products.Include(p => p.colors.Where(c => c.id == 5)).ToLis();

可能你以为是这样,但是结果是错误的!正确的做法是使用一个匿名对象来包装:

var products = db.products.Include(p => p.colors).Select(p => new
{
    id = p.id,
    colors = p.colors.Where(c => c.id == 5)
    //还有其它属性                   
}).ToList();

这个方法虽然可以但是缺点很多,比如要写一堆属性=value, 而且出来是IEnumerable<匿名对象> 而不是 IEnumerable<Product>,所以呢我们应该要这样来写:

IEnumerable<Product> products = db.products.Include(p => p.colors).Select(p => new
{
    Product = p, 
    colors = p.colors.Where(c => c.id == 5)                  
    //不需要其它属性了
}).ToList().Select(p => p.Product).ToList();

以此,可以减少代码量,提高编程速度!!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值