0

我正在学习 EF 和 LINQ to EF。我们使用的是 LINQ 方法而不是 LINQ 表达式。

我正在尝试从我的 2 个实体中进行非常简单的查询。

NavigationGroup 是与 NavigationGroupLocation 的一对多关系。NavigationGroup 中的导航属性称为“NavigationGroupLocations”

在我看来,这段代码应该可以工作:

 List<NavigationGroup> groups = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Location == 1).ToList();

Location 是我的 NavigationGroupLocation 实体中的一个 int。

有人可以解释为什么这不起作用以及通过导航属性过滤的正确方法是什么?我在表达式语法中看到了很多示例,但似乎无法将其与方法语法相关联。

我正在使用 C# 4 和 EF 4。

谢谢您的帮助!

编辑

我看到,由于我的导航属性是一个集合,我无法访问单个属性。所以我正在尝试这段代码:

 .Where(g => g.NavigationGroupLocations.Any(l => l.Location == 1));

当我尝试运行它时,我收到此错误:

 Cannot implicitly convert type 'System.Linq.IQueryable<ME.Data.ECom.NavigationGroup>' to 'System.Data.Objects.ObjectSet<ME.Data.ECom.NavigationGroup>'. An explicit conversion exists (are you missing a cast?)

我应该做什么?

4

2 回答 2

0

看起来像这样有效:

 var query = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));

用作条件语句时它不起作用。

 var query = db.DataModel.NavigationGroups;
 if (selectedLocation > 0)
 {
    query = query.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));
 }

那是我得到错误的时候。

于 2012-04-13T19:09:40.023 回答
0

你需要做一个加入。NavigationGroupLocations是项目列表,因此您无法访问.Locationwhere 子句中的属性。

于 2012-04-13T18:44:17.070 回答