【问题标题】:Setting a navigation property in addition to select all in linq除了在linq中全选之外设置导航属性
【发布时间】:2015-05-05 23:50:56
【问题描述】:

我有一个与实体 ProductCategories 连接的类似于以下内容的 linq 查询:

var list = from p in db.Products
           join pc in db.ProductCategories on p.ProductCategoryId equals pc.Id
           select new Product()
           {
              Id = p.Id, Name = p.Name, CategoryName = pc.Name
           };

假设我想选择 p.* 并另外设置 ProductCategories 中的 CategoryName 导航属性。这可能吗?还是在使用导航属性时我总是必须指定所有内容?

【问题讨论】:

  • 看看here,它不是完全重复,而是一种变体。
  • 所以在我的情况下,如果我只需要这 3 个属性并且它们都是我的 Project 对象的一部分,我会选择 new { p.Id, p.Name, pc.Name } 吗?
  • 正确,是的!只要您不需要*,就可以。
  • 所以可以说我确实想选择所有产品以及 CategoryName 我该怎么做?

标签: c# linq entity-framework


【解决方案1】:

创建一个匿名对象并在一个属性下选择您的产品对象,在另一个属性下选择类别名称

select new 
       {
          Product = p, Name = p.Name, CategoryName = pc.Name
       };

【讨论】:

  • 只要 CategoryName 是属性,它就会自动映射到我的 Product 实体?
  • 只要您的加入正确,CategoryName 和 Product 就会映射
【解决方案2】:

如果您想要整个内容,并且您的导航属性设置正确,则以下内容也应该有效(确保您的文件顶部有using System.Data.Entity;

var list = db.Products.Include(p=>p.ProductCategories);

或更简单的匿名类:

var list = db.Products.Select(p=>new { 
    p.Id,
    p.Description,
    ProductCategoryName=p.ProductCategories.Name});

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2016-04-15
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多