我有以下类,我正在尝试从不同的相关类访问它的属性,如下所示:
var nuInfo = recipe.RECIPE_INGREDIENT
.Select(i => i.INGREDIENT.INGREDIENT_NUTRITIONAL_INFO)
.Where(ni => ni.NUTRITIONAL_INFO.Main == 1);
但是,我无法访问INGREDIENT_NUTRITIONAL_INFO
的任何(虚拟或非虚拟)属性。
INGREDIENT_NUTRITIONAL_INFO
类如下:
public class INGREDIENT_NUTRITIONAL_INFO
{
public int IngredientId { get; set; }
public int Nutritional_InfoId { get; set; }
public double Amount { get; set; }
public DateTime DateSubmitted { get; set; }
public DateTime DateModified { get; set; }
public string SubmittedBy { get; set; }
public string ModifiedBy { get; set; }
public virtual AspNetUsers AspNetUsers { get; set; }
public virtual AspNetUsers AspNetUsers1 { get; set; }
public virtual INGREDIENT INGREDIENT { get; set; }
public virtual NUTRITIONAL_INFO NUTRITIONAL_INFO { get; set; }
}
错误代码如下:
CS1061'ICollection'不包含'NUTRITIONAL_INFO'的定义,并且没有扩展方法'NUTRITIONAL_INFO'可以找到接受类型'ICollection'的第一个参数(你是否缺少using指令或汇编引用?)
我在Linq错过了什么?我试图穿越太多的关系吗?
答案 0 :(得分:4)
错误是因为您未在查询结尾处添加.First()
或.FirstOrDefault()
:
var nuInfo = recipe.RECIPE_INGREDIENT.Select(i => i.INGREDIENT.INGREDIENT_NUTRITIONAL_INFO)
.Where(ni => ni.NUTRITIONAL_INFO.Main == 1)
您的代码尝试访问NUTRITIONAL_INFO
作为集合的属性,而不是集合中成员的属性。
答案 1 :(得分:2)
问题是nuInfo
不仅仅是一个INGREDIENT_NUTRITIONAL_INFO
对象,您的LINQ查询会将结果作为IEnumerable<T>
返回。
如果您想获得单个结果,可以使用First()
,FirstOrDeafult
,Single()
或SingleOrDefault
来返回单个结果。
var nuInfo = recipe.RECIPE_INGREDIENT
.Select(i => i.INGREDIENT.INGREDIENT_NUTRITIONAL_INFO)
.FirstOrDefault(ni => ni.NUTRITIONAL_INFO.Main == 1);