我使用EFF和MySql数据库,我有3个不同的表(比如用户,杂货,usersItems)。情况是 -
UserInvolved
是users.UserID
的外键,而列GroceryID
是groceries.ItemID
的外键。我想要实现的目标是,
从groceries
表格中选择一份杂货清单。
根据此列表,我必须从表usersItems
获取参与购买这些列表的用户列表。最后,我必须从users
表中获取这些用户的名称,并将这些名称显示为;
分号。
这是表格之间的关联 -
这是我试图通过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,我得到的结果是我想要的,但正如你所看到的那样,没有太多优化。总的来说,我想缩短/优化这些查询,我非常困惑,我在哪里出错了。
另外,我曾尝试直接从数据库中以View
的形式实现此结果,但我仍然不能。
答案 0 :(得分:2)
试试这个:
var query = entities.users.Where(u=> u.useritems.SelectMany(ui=> ui.groceries).Any()).Select(u=> u.FullName);
这是使用导航属性...如果你得到一个外键关系...你的导航属性可能名称不同
答案 1 :(得分:0)
您尝试实现的是many-to-many relationship
使用bridge table
。我建议您查看本教程:https://www.youtube.com/watch?v=uMQwORSTGX4。
基本上您需要删除IndexNum
列。然后你应该重新生成你的模型,你将能够检查:
var groceries = user.Groceries;
var users = gorcery.Users;