我正在使用ASP.NET MVC,并且在使用实体框架在两个表之间进行联接时遇到问题。使用实体框架C与参考表进行联接#
在这种情况下,我有一个正在查询:
return db.GENERIC_INGREDIENTS
.Where(genericIngredient => genericIngredient.STATUS_CODE_ID == enabledId)
.AsEnumerable()
.Select(genericIngredient => GenericIngredientToViewModelWithUnitLabel(genericIngredient, languageId))
.OrderBy(genericIngredient => genericIngredient.Name);
但我需要用表db.GENERIC_INGREDIENTS.INGREDIENTS一个连接,然后过滤器适用于CAN_BE_USED属性。我尝试了很多方法来做到这一点,但我遇到了问题。我想,我更接近我想要的查询如下:
return db.GENERIC_INGREDIENTS
.Where(genericIngredient => genericIngredient.STATUS_CODE_ID == enabledId)
.AsEnumerable()
.Select(genericIngredient => GenericIngredientToViewModelWithUnitLabel(genericIngredient, languageId))
.Join(db.INGREDIENTS,
gi => gi.Id,
i => i.GENERIC_INGREDIENT_ID,
(i, gi) => new { GENERIC_INGREDIENTS = gi, INGREDIENTS = i })
.OrderBy(genericIngredient => genericIngredient.Name)
的GenericIngredientToViewModelWithUnitLabel如下:
public GenericIngredientsViewModel GenericIngredientToViewModelWithUnitLabel(GENERIC_INGREDIENTS genericIngredient, int languageId = 0)
{
DBEntities db = new DBEntities();
var genericIngredientTranslation = ReadGenericIngredientsTranslation(genericIngredient, languageId);
var unitLabelTranslation = UnitLabelsService.Service.ReadUnitLabelTranslationById(db, genericIngredient.UNIT_LABEL_ID, languageId);
return new GenericIngredientsViewModel
{
Id = genericIngredient.GENERIC_INGREDIENT_ID,
StatusCodeId = genericIngredient.STATUS_CODE_ID,
UnitLabelId = genericIngredient.UNIT_LABEL_ID,
Name = genericIngredientTranslation.GENERIC_INGREDIENT_NAME + " (" + unitLabelTranslation.Name+ ")",
Description = genericIngredientTranslation.GENERIC_INGREDIENT_DESCRIPTION,
Languages = genericIngredient.GENERIC_INGREDIENTS_TRANSLATIONS.Select(translation => translation.LANGUAGE_ID).ToList()
};
}
在这第二个查询将返回一个错误“匿名类型:主料GENERIC_INGREDIENTS ,GenericIngredientsViewModel不包含名称的定义。“。由于GenericIngredientToViewModelWithUnitLabel返回名称,所以这对我来说没有多大意义。此查询必须返回一个IEnumerable。
感谢您的任何帮助。
那不要工作:(。同样的错误 –
@DanielSerrão上面提到的现有查询是否工作?如果是这样,那么根据查询'.Name'是你在最后命令的内容,它是属性o你的'GenericIngredientsViewModel'类。根据你的错误文本,它看起来像最后一个order by子句不能访问'.Name'属性,因为新创建的匿名类型没有它,所以上面的答案应该工作。你可以尝试省略'OrderBy'子句来确认错误是由于它吗?此外如果可能的话分享确切的错误信息。 – degant