【问题标题】:Entity Framework query Related Entities in single query实体框架查询单个查询中的相关实体
【发布时间】:2018-11-19 21:09:42
【问题描述】:

我有包含 4 级父子数据的分层数据。 CropCategory 有许多作物,其中有许多子作物,而子作物又具有许多栽培品种。每个实体都有一个 Id 和一个描述,其中描述在单个实体中不是唯一的,而是所有 4 个的组合。

我需要从一组描述中找出一个品种。我有以下代码可以正常工作,但我很肯定这不是获得答案的最有效方法。我想在数据库的一次往返中完成。

string cropCategoryDescription = "Some Crop Category"
string cropDescription = "Some Crop"
string subCropDescription = "Some SubCrop"
string cultivarDescription = "Some Cultivar"

CropCategory cropCategory = _context.CropCategories.FirstOrDefault(cc => cc.Description == cropCategoryDescription);

Crop crop = _context.Crops.FirstOrDefault(c => c.Description == cropDescription && c.CropCategoryId == cropCategory.CropCategoryId);

SubCrop subCrop = _context.SubCrops.FirstOrDefault(sc => sc.Description == subCropDescription && sc.CropId == crop.CropId);

Cultivar cultivar = _context.Cultivars.FirstOrDefault(cu => cu.Description == cultivarDescription && cu.SubCropId == subCrop.SubCropId);

CurrentCultivar = cultivar;

我已经阅读了很多帖子和博客来寻找理论,但我对各种术语感到困惑。任何可以为我指明正确方向的想法将不胜感激。

【问题讨论】:

    标签: linq lambda entity-framework-6


    【解决方案1】:

    使用应在模型中定义的导航属性:

    var result = _context.Cultivars
        .Where( cu =>
            cu.Description == cultivarDescription
            && cu.SubCrop.Description == subCropDescription
            && cu.SubCrop.Crop.Description == cropDescription
            && cu.SubCrop.Crop.CropCategory.Description == cropCategoryDescription )
        // projection to match your results
        // but you could use Include()'s on _context.Cultivars
        .Select( cu => new
        {
            Cultivar = cu,
            SubCrop = cu.SubCrop,
            Crop = cu.SubCrop.Crop,
            CropCategory = cu.SubCrop.Crop.CropCategory,
        })
        .FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2013-03-17
      • 2014-02-24
      相关资源
      最近更新 更多