C# 如何创建从项目列表中筛选的lambda表达式?

C# 如何创建从项目列表中筛选的lambda表达式?,c#,C#,我使用的是实体框架,拥有以下类: 有一个搜索函数,它根据一些条件查询数据库,这些条件收集在SearchJSON对象中: public class SearchJSON : ISearchObject { public List<String> sites { get; set; } public int minWage { get; set; } public int maxWage { get; set; }

我使用的是实体框架,拥有以下类:

有一个搜索函数,它根据一些条件查询数据库,这些条件收集在SearchJSON对象中:

public class SearchJSON : ISearchObject
    {
        public List<String> sites { get; set; }
        public int minWage { get; set; }
        public int maxWage { get; set; }
        public List<String> countries { get; set; }
        public int minRating { get; set; }
        public int maxRating { get; set; }

    }
公共类SearchJSON:ISearchObject
{
公共列表站点{get;set;}
公共整数{get;set;}
公共整数maxWage{get;set;}
公共列表国家{get;set;}
公共整数{get;set;}
public int maxRating{get;set;}
}
目前,我已经设法按HourWageMin和HourWageMax筛选结果,但我也想筛选国家和技能。这是我目前的疑问:

var query =
db.Freelancers.Where(x => x.HourWageMin >= data.minWage && x.HourWageMax <= data.maxWage).ToList();
var查询=

db.freegors.Where(x=>x.HourWageMin>=data.minWage&&x.HourWageMax您可以使用任意值,并包含:

var query = db.Freelancers.Where(
    x => x.HourWageMin >= data.minWage &&
    x.HourWageMax <= data.maxWage &&
    x.skills.Any(s => data.countries.Contains(s.Name)) &&
    x.countries.Any(c => data.skills.Contains(c.Name))
).ToList();
var query=db.freegors.Where(
x=>x.HourWageMin>=data.minWage&&
x、 HourWageMax数据.countries.Contains(s.Name))&&
x、 countries.Any(c=>data.skills.Contains(c.Name))
).ToList();

首先,您应该将自由职业者上的“国家导航”属性重命名为“国家”,以避免混淆,因为这是一种0或1对多关系。我认为自由职业者不能拥有一个以上的国家

根据国家/地区进行筛选很容易:

var query = db.Freelancers.Where(x => x.Country != null && x.Country.Name == "France");
根据自由职业者是否具有特定技能进行筛选:

var query = db.Freelancers.Where(x => x.Skills.Any(s => s.Name == "Artist"));
您还可以使用&&over和over将Where方法链接在一起,以提高可读性:

var query = db.Freelancers.Where(x => x.HourWageMin >= data.minWage)
                          .Where(x => x.HourWageMax <= data.maxWage)
                          .Where(x => x.Country != null && x.Country.Name == "France")
                          .Where(x => x.Skills.Any(s => s.Name == "Artist"));
var query=db.freegors.Where(x=>x.HourWageMin>=data.minWage)
.Where(x=>x.HourWageMax x.Country!=null&&x.Country.Name==“法国”)
其中(x=>x.Skills.Any(s=>s.Name==“艺术家”);