查找存在于另一个列表中的所有具有 list 属性元素的对象

Find all objects with list attribute element that exist in another list

我有两个列表。一个是来自数据库的 AppUser 类型,另一个是作为参数传入的客户类型。这是 class 的定义。

public class AppUser
{
  public int Id{get;set;}
  public string Name{get;set;}
  public IEnumerable<Customer> customers{get;set;}
}

public class Customer
{
  public int Id{get;set;}
  public string Name{get;set;}
  public IEnumerable<User> users{get;set;}
}

我正在尝试创建一个 API 端点,它允许一个人传入客户列表并取回数据库中该客户列表的所有唯一用户。所以我有一个用户列表属性,需要将其与传递给 API 的客户列表进行比较。我使用以下代码,但它不起作用。我对 linq 有点陌生,所以真的很困惑。

var joinUsers = repoUsers.Join(
   customers, 
   uObj => uObj, 
   cObj => cObj, 
   (uObj, cObj) => uObj
);

repoUsers 是我的数据库用户列表,每个用户都有一个客户列表作为属性。

customers 是我传递到 API 的客户列表。

与传入的客户列表和 return 与客户列表中的客户匹配的 repoUsers 相比,我如何使用其客户列表属性加入我的 repoUsers 对象?

将您的输入投影到 IEnumerable 个 ID,然后在 Customer.Id 上使用 Contains 方法。最后使用 SelectMany 汇总每个客户的 Users 属性 然后 Distinct 删除重复项

var cutomerIDs = customers.Select( c => c.Id );

var usersQuery = dbContext.Customers
    .Where( c => customerIDs.Contains( c.Id ) )
    .SelectMany( c => c.Users )
    .Distinct();