C# 优化LINQ表达式

C# 优化LINQ表达式,c#,mysql,linq,entity-framework,optimization,C#,Mysql,Linq,Entity Framework,Optimization,我在MySql数据库中使用EFF,在这里我有3个不同的表(比如用户、杂货店、用户站点)。情况是这样的- UsersItems具有参与杂货购买的用户列表 列userincluded是用户的外键。UserID和列GroceryID是杂货店的外键。ItemID 食品杂货是否已购买食品杂货清单 用户拥有用户详细信息列表。(只有名称与表有关) 我想要实现的是, 从杂货表中选择杂货清单。 基于此列表,我必须从表usersItems中获取参与购买这些列表的用户列表。最后,我必须从users表中获取这些用户的名

我在MySql数据库中使用EFF,在这里我有3个不同的表(比如用户、杂货店、用户站点)。情况是这样的-

  • UsersItems具有参与杂货购买的用户列表
    userincluded
    用户的外键。UserID

    GroceryID
    杂货店的外键。ItemID
  • 食品杂货是否已购买食品杂货清单
  • 用户拥有用户详细信息列表。(只有名称与表有关)
  • 我想要实现的是,
    杂货
    表中选择杂货清单。 基于此列表,我必须从表
    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,我得到了我想要的结果,但正如您所看到的,这并没有得到太多优化。总的来说,我想缩短/优化这些查询,我非常困惑,哪里出了问题。 此外,我曾试图通过直接从数据库中查看
    来实现此结果,但仍然无法实现。

    尝试以下方法:

    var query = entities.users.Where(u=> u.useritems.SelectMany(ui=> ui.groceries).Any()).Select(u=> u.FullName);
    

    这正在使用导航属性。。。如果你有外侨关系。。。您的导航属性可能会被命名为不同的

    但您试图使用
    桥接表实现的是
    多对多关系
    。我建议在以下位置查看本教程:

    基本上,您需要做的是删除
    IndexNum
    列。然后您应该重新生成您的模型,您将能够检查:

    var groceries = user.Groceries;
    var users = gorcery.Users;