首页 > 解决方案 > 如何获取 list1 的任何项目 sublist1 至少有一个 list2 项目?

问题描述

我有一个用户列表,每个用户都有一些最喜欢的产品。所以每个用户都有一个最喜欢的产品列表。

在搜索面板中,我想检查一些产品,作为搜索结果,我想返回至少拥有这些检查产品之一的用户列表。最后一个。但不是没有检查任何这些产品的用户。

    public class User
{
    public long Id { get; set; }
    public string Name { get; set; }
    public List<UserProduct> UserProducts { get; set; }

    public User()
    {

    }

    public User(long id,string name,List<long> productIds)
    {
        Id = id;
        Name = name;
        UserProducts = productIds.Select(x => new UserProduct(id, x)).ToList();
    }
}

public class Products
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }

    public Products()
    {

    }

    public Products(int productId,string name)
    {
        ProductId = productId;
        ProductName = name;
    }


}

public class UserProduct
{
    public int Id { get; set; }
    public long UserId { get; set; }
    public long ProductId { get; set; }

    public UserProduct()
    {

    }

    public UserProduct(long userId,long productId)
    {
        ProductId = productId;
        UserId = userId;
    }
}

public class SearchDto
{
    public List<long> SearchProductIds { get; set; }
}

public class Main
{
    public void FillUsers()
    {
        List<Products> products=new List<Products>()
        {
            new Products(1,"a"),
            new Products(2,"b"),
            new Products(3,"c"),
            new Products(4,"d"),
            new Products(5,"e"),
            new Products(6,"f"),
            new Products(7,"g"),
        };
        List<User> users=new    List<User>()
        {
            new User(1,"jack",new List<long>(){1} ),
            new User(2,"Mary",new List<long>(){1,4} ),
            new User(3,"Sam",new List<long>(){5} ),
            new User(4,"Sara",new List<long>(){7,1,2} ),
        };

        SearchDto dto=new SearchDto()
        {
            SearchProductIds = new List<long> { 1,4}
        };


        //Here as search dto :I want to get Jack,Mary and Sara  beacause they have 1 or 4 in their products
    }
}

标签: c#linq

解决方案


假设您有一个您选择的产品的 ID 列表(selectedProductIdList

我假设您的 User模型看起来像这样

public string Username {get; set;}
public string FirstName {get; set;}
//....
//more User data
//....
public List<Product> FavouriteProduct {get; set;}

您的用户搜索结果将是

var userList = listOfUsers.Where(u => u.FavouriteProduct.Where(p => selectedProductIdList.Contains(p.Id)));

推荐阅读