【发布时间】:2020-05-28 13:02:02
【问题描述】:
我有三张桌子,
表: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"] & countries= ["India","Romania"] 搜索项目,那么它应该显示如下用户结果:
UserId UserName ...
1 Jhon ...
2 Ashley ...
或仅按国家搜索项目= ["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; }
}
【问题讨论】:
-
你能添加你的实体吗?
-
实际上,机密细节在那里,所以只是没有包括所有细节。对不起。如果我包含,那么任何人都可以轻松识别实际品牌的客户和名称等。
-
我的意思是
Users、UserBrands和UserCountries类。您可以排除所有不重要的字段。 -
public class UserBrands { [Key] public virtual int UserBrandsId { get;放; } 公共虚拟 int UserId { 获取;放; } 公共虚拟 int BrandId { 获取;放; } 公共虚拟字符串 BrandName { 获取;放; } } public class UserCountries { [Key] public virtual int UserCountriesId { get;放; } 公共虚拟 int UserId { 获取;放; } 公共虚拟 int CountryId { 获取;放; } 公共虚拟字符串 CountryName { 获取;放; } }
-
请将它们添加到问题中)
标签: c# linq lambda entity-framework-core