优化 LINQ 表达式

Optimizing the LINQ expressions

我将 EFF 与 MySql 数据库一起使用,其中我有 3 个不同的 tables(比如用户、杂货店、usersItems)。情况是-

  1. UsersItems 包含参与杂货购买的用户列表。
    UserInvolved 列是 users.UserID 的外键,
    GroceryIDgroceries.ItemID.
  2. 的外键
  3. groceries 有已购买的杂货清单。
  4. users有用户详细信息列表。(只有姓名关注table)

我想要实现的是,
groceriestable中选择了一份杂货清单。 根据这个列表,我得从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;