【问题标题】:LINQ to Entities - limiting included tablesLINQ to Entities - 限制包含的表
【发布时间】:2011-03-22 08:48:25
【问题描述】:

使用具有一对多关系的两个表(例如 Make -> Model),如何在 IQueryable 函数中返回具有有限 Model 子级的 Make?

当我将“camry”作为变量传递时,我想返回一个只有孩子的 Toyota Make,称为“camry”,而不是所有孩子。基本上,我想重新创建这个 SQL 语句:

SELECT
    MakeName,
    ModelName
FROM
    Make
    LEFT OUTER JOIN Model ON Model.MakeId = Make.MakeId
WHERE
    Model.ModelName = 'camry'

到目前为止,LINQ 语句如下所示:

return this.ObjectContext.Make
    .Include("Model")
    .Where(make => make.Model.ModelName.Equals("camry")

这显然在语法上不正确,因为 Where 子句中的 .Model 是一个实体集合,没有 .ModelName 属性。

如何限制包含的表格?这在 LINQ to Entities 中可行吗?

【问题讨论】:

    标签: c# linq-to-entities iqueryable


    【解决方案1】:

    注意,这不是我的想法,我没有费心去编译,所以可能有点不对劲:

    return this.ObjectContext.Make.Include("Model")
        .Where(make => make.Models.Any(model => model.ModelName == "camry"))
    

    另外请注意,我认为品牌将有“模型”而不是“模型”

    编辑:

    我没有正确理解这个问题。这是您想要的查询:

    return this.ObjectContext.Model.Include("Make")
        .Where(model => model.ModelName == "camry")
    

    【讨论】:

    • 这似乎返回所有模型,只要其中一个被称为“camry”,如果没有一个模型被称为“camry”,则没有模型。
    【解决方案2】:

    这应该也可以:

    from make in ctx.Makes
    from model in make.Models
    where model.Name == "camry"
    select new 
    {
       Make = make, 
       Model = model
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-25
      • 2010-09-27
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2017-03-20
      相关资源
      最近更新 更多