【发布时间】:2018-07-31 11:53:24
【问题描述】:
有两个表,用户和费用,具有一对多的关系。因此,UserClass 包含一个名为 Expenses 的 ICollection 类型的导航属性。我想要的是获取所有名为 John 的用户,并且仅包括费用描述为午餐的费用。以下是我想出的。但我觉得有更好的方法。我想转换这个:
List<User> users = db.Users.Where(user => user.Name == "John").ToList();
foreach (User user in users)
{
List<Expense> expenses = db.Expenses.Where(expense => expense.Description == "Lunch" && expense.AddedBy == user.Id).ToList();
user.Expenses = expenses;
}
到这样的事情:
List<User> users = db.Users.Where(user => user.Name == "John").Include(user => user.Expenses.Where(expence => expence.Description == "Lunch")).ToList();
但它会引发以下异常
抛出异常:EntityFramework.dll 中的“System.ArgumentException” 包含路径表达式必须引用在类型上定义的导航属性。对引用导航属性使用虚线路径,对集合导航属性使用 Select 运算符。 参数名称:路径
我想要的 SQL 查询如下所示:
SELECT * FROM dbo.[User] AS A
INNER JOIN Expense AS B
ON A.Id = B.AddedBy
WHERE A.Name = 'John' AND B.Description = 'Lunch'
型号: Image
PS:我是实体框架的新手
谢谢。
【问题讨论】:
-
显示你的模型类
-
可以在where条件前尝试使用Include方法吗
-
我不认为你可以
Include只有导航属性的一些实例。.Include(user => user.Expenses)应该可以工作 -
@mshwf 我添加了一张图片
-
@Md.AbdulAlim 还是一样
标签: c# entity-framework linq lambda