0

我已经问过类似的问题,但不是很准确,所以我会再做一次。

假设我有一个模型,其中一个实体包含另一个实体。有没有办法通过 linq 查询访问子实体的属性?这是示例:

string category = "something";

IEnumerable<string> Items = _itemsRepository.GetItems()
                .Where(i => i.Product.Category == category)
                .OrderBy(i => i.ItemId);

在子句“Where”中,我想访问子实体的属性“Category”,(这段代码不起作用)。表“Items”包含表“Products”的外键“ProductId”。
所以在这里我想选择产品类别等于“某物”的项目。如何做呢?

先感谢您!

4

3 回答 3

1

正如其他人在评论中建议的那样,提供有关错误的更多信息将有助于我们回答您的问题。

你得到一个空引用异常吗?

如果是这样,请确保将您的子实体/导航属性包含在 linq 语句或方法中正在执行的查询中_itemsRepository.GetItems()

实体框架不会加载您的相关对象,除非您告诉它。我建议您使用该.Include()方法急切地加载您的属性。您需要将此作为您在GetItems(). 您还可以使用延迟加载来访问您的子属性。这是一篇解释它的文章。

http://msdn.microsoft.com/en-us/magazine/hh205756.aspx

希望有帮助。

于 2012-12-27T13:14:26.113 回答
1
IEnumerable<Item> Items = _itemsRepository.GetItems()
                .Where(i => category == null || 
                           (i.Product != null && 
                            i.Product.Category == category))
                .OrderBy(i => i.ItemId);
于 2012-12-28T15:48:05.890 回答
0

您缺少一个选择子句

    IEnumerable<string> Items = _itemsRepository.GetItems()
            .Where(i => i.Product.Category == category)
            .OrderBy(i => i.ItemId)
            .Select(i => i.Name); //<- or whatever string property you expect to get out

否则,你不应该有IEnumerable<string>,而是IEnumerable<Item>你的实体被称为什么。

于 2012-12-27T14:30:56.567 回答