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

来源:互联网 发布:孤独大脑 喻颖正 知乎 编辑:程序博客网 时间:2024/05/15 07:36

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

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();

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





阅读全文
1 0
原创粉丝点击