优化 LINQ 表达式
Optimizing the LINQ expressions
我将 EFF 与 MySql 数据库一起使用,其中我有 3 个不同的 tables(比如用户、杂货店、usersItems)。情况是-
- UsersItems 包含参与杂货购买的用户列表。
UserInvolved
列是 users.UserID
的外键,
列 GroceryID
是 groceries.ItemID
. 的外键
- groceries 有已购买的杂货清单。
- users有用户详细信息列表。(只有姓名关注table)
我想要实现的是,
从groceries
table中选择了一份杂货清单。
根据这个列表,我得从tableusersItems
中得到参与购买这些列表的用户列表。最后,我必须从 users
table 中获取这些用户的名称,并将这些名称显示为 ;
分号分隔。
这是 tables- 之间的关联
这是我试图通过 Linq 实现的目标
var gList = entities.groceries.Select(item => item.ItemID);
var uInvolved = entities.usersitems.Where(item => gList.Contains(item.GroceryId)).Select(u => u.userInvolved);
var usrs = string.Join(";", entities.users.Where(us => uInvolved.Contains(us.UserID)).Select(name => name.FullName));
通过使用这些 linq,我得到了我想要的结果,但如您所见,这并没有得到太多优化。总的来说,我想 shorten/Optimize 这些查询,但我很困惑,哪里出错了。
另外,我曾尝试直接从数据库中以 View
的形式获得此结果,但我仍然做不到。
试试这个:
var query = entities.users.Where(u=> u.useritems.SelectMany(ui=> ui.groceries).Any()).Select(u=> u.FullName);
这是在使用导航属性...如果您获得外键关系...您的导航属性可能命名不同
您要实现的是 many-to-many relationship
使用 bridge table
。我建议查看本教程:https://www.youtube.com/watch?v=uMQwORSTGX4.
基本上您需要做的是删除 IndexNum
列。然后你应该重新生成你的模型,你将能够检查:
var groceries = user.Groceries;
var users = gorcery.Users;
我将 EFF 与 MySql 数据库一起使用,其中我有 3 个不同的 tables(比如用户、杂货店、usersItems)。情况是-
- UsersItems 包含参与杂货购买的用户列表。
UserInvolved
列是users.UserID
的外键,
列GroceryID
是groceries.ItemID
. 的外键
- groceries 有已购买的杂货清单。
- users有用户详细信息列表。(只有姓名关注table)
我想要实现的是,
从groceries
table中选择了一份杂货清单。
根据这个列表,我得从tableusersItems
中得到参与购买这些列表的用户列表。最后,我必须从 users
table 中获取这些用户的名称,并将这些名称显示为 ;
分号分隔。
这是 tables- 之间的关联
这是我试图通过 Linq 实现的目标
var gList = entities.groceries.Select(item => item.ItemID);
var uInvolved = entities.usersitems.Where(item => gList.Contains(item.GroceryId)).Select(u => u.userInvolved);
var usrs = string.Join(";", entities.users.Where(us => uInvolved.Contains(us.UserID)).Select(name => name.FullName));
通过使用这些 linq,我得到了我想要的结果,但如您所见,这并没有得到太多优化。总的来说,我想 shorten/Optimize 这些查询,但我很困惑,哪里出错了。
另外,我曾尝试直接从数据库中以 View
的形式获得此结果,但我仍然做不到。
试试这个:
var query = entities.users.Where(u=> u.useritems.SelectMany(ui=> ui.groceries).Any()).Select(u=> u.FullName);
这是在使用导航属性...如果您获得外键关系...您的导航属性可能命名不同
您要实现的是 many-to-many relationship
使用 bridge table
。我建议查看本教程:https://www.youtube.com/watch?v=uMQwORSTGX4.
基本上您需要做的是删除 IndexNum
列。然后你应该重新生成你的模型,你将能够检查:
var groceries = user.Groceries;
var users = gorcery.Users;