Linq没有看到属性

时间:2016-02-11 14:13:49

标签: sql asp.net-mvc entity-framework linq

我有以下类,我正在尝试从不同的相关类访问它的属性,如下所示:

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错过了什么?我试图穿越太多的关系吗?

2 个答案:

答案 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()FirstOrDeafultSingle()SingleOrDefault来返回单个结果。

var nuInfo = recipe.RECIPE_INGREDIENT
.Select(i => i.INGREDIENT.INGREDIENT_NUTRITIONAL_INFO)
.FirstOrDefault(ni => ni.NUTRITIONAL_INFO.Main == 1);