2016-02-11 2 views
2

У меня есть следующий класс, и я пытаюсь получить доступ к его свойствам из другого соответствующего класса следующим образом: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» (вам не хватает директивы использования или ссылки на сборку?)

Я что-то пропустил в Линк? Я пытаюсь пересечь слишком много отношений?

+0

Вы можете получить доступ к IngredientId? или вы не можете использовать виртуальные типы сущностей? –

+0

Ключ 'ICollection' в вашем стеке. Коллекция вещей - это не одно и то же. – hatchet

+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 как свойство коллекции, а не как свойство член в сборнике.

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); 
+0

Мне нужно возвращать список из 'INGREDIENT_NUTRITIONAL_INFO' – rory

+0

Ваш код выглядит он уже должен делать это,' recipe.RECIPE_INGREDIENT' является an'IEnumerable «Правильно? – Gilgamesh

+0

yes, 'recipe.RECIPE_INGREDIENT' является' ICollection ' – rory

Смежные вопросы