我有三张桌子,
表格1
UserId UserName ...
1 Jhon ...
2 Ashley ...
3 Alexa ...
4 Krish ...
表:2
BrandId UserId BrandName
1 1 BMW
2 1 Citroen
3 2 Audi
4 4 Peugeot
表3
CountryId UserId CountryName
1 3 Austria
现在我想要的是,如果用户按 Brands = ["BMW", "Audi"] & Country= ["India","Romania"] 搜索项目,那么它应该显示如下用户结果:
UserId UserName ...
1 Jhon ...
2 Ashley ...
或仅按 Country= ["India","Austria"] 搜索项目,则结果应为:
UserId UserName ...
3 Alexa ...
我试过像 C#-LINQ 一样,但我总是得到所有的用户数据。它不是根据给定的品牌或国家输入进行过滤的。因此,如果品牌或国家/地区与数据库数据匹配,它应该提供数据。即使我从 LINQ 部分中删除“into”,它也没有正确给出。我哪里做错了?
var users = new List<Users>();
users = _DbContext.Users.Where(x => x.Roles == model.Role).ToList();
users = (from p in users
join b in _DbContext.UserBrands.Where(x => model.arBrands.Contains(x.BrandName)).ToList() on p.UserSequence equals b.UserId into bg
join c in _DbContext.UserCountries.Where(x => model.arCountries.Contains(x.CountryName)).ToList() on p.UserSequence equals c.UserId into cg
select p).ToList();
还有我的样本有效载荷,
{
"arBrands": ["Citroen","Peugeot"],
"arCountries":["India","Romania"],
"Role":"All Roles"
}
实体:
public class UserBrands
{
[Key] public virtual int UserBrandsId { get; set; }
public virtual int UserId { get; set; }
public virtual int BrandId { get; set; }
public virtual string BrandName { get; set; }
}
public class UserCountries
{
[Key] public virtual int UserCountriesId { get; set; }
public virtual int UserId { get; set; }
public virtual int CountryId { get; set; }
public virtual string CountryName { get; set; }
}
public class UsersModel
{
public string[] arCountries { get; set; }
public string[] arBrands { get; set; }
[Required]
public string Role { get; set; }
public List<LeafLet> features { get; set; }
}
public class Users : BaseEntity
{
[Key]
public virtual int UserSequence { get; set; }
public virtual string UserName { get; set; }
public virtual string Countries { get; set; }
public virtual string Brands { get; set; }
public virtual string Email { get; set; }
public virtual string Latitude { get; set; }
public virtual string Longitude { get; set; }
public virtual string ProjectRole { get; set; }
public virtual string Roles { get; set; }
}