Я новичок с EF, поэтому мой вопрос, вероятно, основной, но я не мог найти ответ ...Navigate по отношениям в EF
У меня есть SQL Compact DB, из которого я генерируемый объект модели с помощью мастера VS. Все кажется прекрасным, я извлекаю все свои отношения с хорошим картографированием.
Так как я понимаю здесь: http://msdn.microsoft.com/en-us/library/bb386932(v=vs.110).aspx я должен быть в состоянии сделать это, «запрос по отношениям»:
IQueryable<Ingredient> IngQuery = from i in db.Ingredient
where i.Product.ID == ProdID
select i;
Но я получаю следующее сообщение об ошибке:
'System.Collections.Generic.ICollection' does not contain a definition for 'ID' and no extension method 'ID' accepting a first argument of type 'System.Collections.Generic.ICollection' could be found (are you missing a using directive or an assembly reference?).
This error occurs when you try to call a method or access a class member that does not exist
Однако, если Я углубляюсь в автогенерируемый код, я вижу, что идентификатор общественной собственности объявляется для «Продукта», а «Ингредиент» возвращает коллекцию «Продукт»:
Ингредиент
public partial class Ingredient { public Ingredient() { this.Product = new HashSet<Product>(); } public string Name { get; set; } public int ID { get; set; } public virtual ICollection<Product> Product { get; set; } }
Продукт
public partial class Products { public Products() { this.Ingredient = new HashSet<T_PROPSTHERAP>(); } public int ID { get; set; } public string Name { get; set; } public string Usage { get; set; } public byte[] Photo { get; set; } public int FK_OrganeProduct { get; set; } public int FK_Type { get; set; } public virtual OrganeProduct OrganeProduct { get; set; } public virtual Type Type { get; set; } public virtual ICollection<Ingredient> Ingredient { get; set; } }
Но это не работает, как я ожидал.
я могу использовать следующее в качестве временного решения:
List<Ingredient> lstIng = (_oTest.Products
.Where(p => p.Name == (string)lsbProducts.SelectedItem)
.SelectMany(p => p.T_PROPSTHERAP)).ToList();
Но я не думаю, что это умный способ сделать трюк ... И я не понимаю, что я не хватает ...
Может ли кто-нибудь помочь?
М. Просто спасибо! :) Это именно то, что я ожидал! – Levenbrech
@ Levenbrech, пожалуйста, не забудьте [отметить это как ответ] (http://meta.stackexchange.com/a/5235), если это поможет –