[英]How to get list1 items that any items of sublist1 at least has one item of 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
}
}
假設您有一個所選產品的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)));
假設所有列表都在內存中,以防數據庫相應地修改代碼。
var result= (from p1 in SearchDtoList
join p2 in UserProductList
on p1 equals p2.ProductId
join u in UserList
on p2.UserId equals u.Id
select u).ToList();
如果SearchPanelDto.SelectedProductsList返回ID列表,則
Var searchedProductsIds = SearchPanelDto.SelectedProductsList;
var userList = listOfUsers.Where(m =>
searchedProductsIds.Any(x=> m.IntrestetProducts.Select(t => t.ProductId).Any(z => x.Equals(z))));
否則,如果SearchPanelDto.SelectedProductsList返回包含ID的對象的列表
//Get selected productIds from search panel
Var searchedProductsIds = SearchPanelDto.SelectedProductsList.select(m=>m.ProductId).ToList();
var userList = listOfUsers.Where(m =>
searchedProductsIds.Any(x=> m.IntrestetProducts.Select(t => t.ProductId).Any(z => x.Equals(z))));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.