我有 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;
我已经阅读了很多帖子和博客来寻找理论,但对各种术语感到困惑。任何为我指明正确方向的想法将不胜感激。
使用应在模型中定义的导航属性:
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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句