【问题标题】:linq to one to many relationship Entity frameworklinq 到一对多关系实体框架
【发布时间】:2015-03-24 04:41:29
【问题描述】:

我正在尝试学习实体框架,并构建了一个简单的应用程序来列出和搜索产品,到目前为止一切正常,我似乎遇到的唯一问题是在一对多表上过滤产品。

一个产品可以有多种类型

表结构是:-

产品

产品编号

颜色标识

产品名称

产品类型

产品类型ID

产品编号

类型ID

类型

类型ID

类型名称

到目前为止,我们的 linq 看起来像:- (ColourID 和 ProductTypeID 是传入过程的变量)

var qry = ctx.Products.AsQueryable();

qry = qry.Where(b => b.Product.ColourID == *ColorId*);

qry = qry.Where(b => b.Product.ProductTypes.Any(l => l.ProductTypeID == *ProductTypeID*));

qry.Select(c => new ProductDTO
                {
                    ProductID = c.ProductID,
                    ProductName = c.Product.ProductName
                }).ToList();

这实际上没有返回任何结果(已经使用 SQL 对 DB 进行了检查和测试)

【问题讨论】:

  • 你能把班级结构贴出来
  • "...在一对多表上..." 当您拥有 Product 和 ProductType 时,从 EF 的角度来看,这是一个 N 到 M 的关系。这意味着您创建 2 个实体,每个实体都引用另一种类型的集合。从 EF 的角度来看,当您在交汇点/桥表上放置其他字段时,这只是 1 到 N 的关系。然后你需要创建 3 个实体。

标签: c# linq entity-framework


【解决方案1】:

可以使用join获取数据:

var result = (from p in ctx.Products
             join pt in ctx.ProductTypes on p.ProductTypeId equals pt.ProductTypeID
             where p.ColourId == ColorId && pt.ProducrtTypeID ==ProductTypeID
             select new ProductDTO
                     {
                       ProductID = p.ProductID,
                       ProductName = p.ProductName
                     ]).ToList();

使用 lambda 语法:

var result = ctx.Products
            .Join(ctx.ProductTypes,
                 product=> product.ProductTypeID,
                 producttype => producttype.ProductTypeID,
                (product, producttype) => new 
                                         { 
                                          Product = product,
                                          ProductType = producttype 
                                         })
           .Where(productAndType => productAndType.Product.ColourId == ColorId
               && productAndType.ProductType.ProductTypeID == productTypeID)
           .Select(x => new ProductDTO
                        {
                          ProductID = x,Product.ProductID,
                           ProductName = x.Product.ProductName
                        }).ToList();

【讨论】:

  • 如何使用我们目前使用的方法来实现:- qry = qry.join ??
猜你喜欢
  • 2016-12-15
  • 2013-11-24
  • 2011-04-01
  • 1970-01-01
  • 2017-01-28
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多