C# 在Where子句中使用Or和Select将所有条目与int、lambda表达式进行比较
我必须使用此方法C# 在Where子句中使用Or和Select将所有条目与int、lambda表达式进行比较,c#,linq,select,lambda,where-clause,C#,Linq,Select,Lambda,Where Clause,我必须使用此方法GetByName或WardYearOrderedByAwardYearDesc来显示具有正确姓名的所有获奖者或该年内的所有获奖者,我已经非常接近了,但我得到了一个错误 运算符==不能应用于类型为IEnumerable和int 我理解这个错误,但我不知道如何正确地解决它。我已经尝试了很多东西,也在网上搜索过,但是我找不到这样的例子 public ICollection<Laureate> GetByNameOrAwardYearOrderedByAwardYearDe
GetByName或WardYearOrderedByAwardYearDesc
来显示具有正确姓名的所有获奖者或该年内的所有获奖者,我已经非常接近了,但我得到了一个错误
运算符==不能应用于类型为IEnumerable
和int
我理解这个错误,但我不知道如何正确地解决它。我已经尝试了很多东西,也在网上搜索过,但是我找不到这样的例子
public ICollection<Laureate> GetByNameOrAwardYearOrderedByAwardYearDesc(string name, int year)
{
List<Laureate> laureatesList = _dbContext.Laureates
.Include(p => p.Prizes)
.Where(p => p.Name == name || p.Prizes.Select(ay => ay.AwardYear) == year)
// .Where(p => p.Name == name || p.Prizes.Select(ay => ay.AwardYear == year)
// .Where(p => p.Name == name || p.Prizes.AwardYear == year)
.Select(p => new Laureate
{
Id = p.Id,
Name = p.Name,
FamilyName = p.FamilyName,
BirthDate = p.BirthDate,
Prizes = p.Prizes
})
.ToList();
return laureatesList;
}
public class Laureate
{
public int Id { get; set; }
public string Name { get; set; }
public string FamilyName { get; set; }
public DateTime? BirthDate { get; set; }
public List<Prize> Prizes { get; set; }
}
public class Prize
{
public int Id { get; set; }
public int AwardYear { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
public DateTime? DateAwarded { get; set; }
public PrizeStatus Status { get; set; }
public String Motivation { get; set; }
public decimal Amount { get; set; }
public int LaureateId { get; set; }
public virtual Laureate Owner { get; set; }
}
public ICollection GetByName或WardYearOrderedByAwardYearDesc(字符串名称,整数年)
{
列出获奖者列表=_dbContext.Laureates
.包括(p=>p.奖品)
。其中(p=>p.Name==Name | | p.奖品。选择(ay=>ay.AwardYear)==year)
//.Where(p=>p.Name==Name | | p.prices.Select(ay=>ay.AwardYear==year)
//.其中(p=>p.Name==Name | | p.prices.AwardYear==year)
.选择(p=>new Laureate
{
Id=p.Id,
名称=p.名称,
FamilyName=p.FamilyName,
生日=p.生日,
奖品
})
.ToList();
返回桂冠得主;
}
公共级桂冠得主
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串FamilyName{get;set;}
公共日期时间?生日{get;set;}
公开列表奖品{get;set;}
}
公共班级奖
{
公共int Id{get;set;}
public int AwardYear{get;set;}
public int CategoryId{get;set;}
公共虚拟类别{get;set;}
公共日期时间?日期{get;set;}
公共PrizeStatus状态{get;set;}
公共字符串{get;set;}
公共十进制数{get;set;}
public int LaureateId{get;set;}
公共虚拟桂冠所有者{get;set;}
}
您可以尝试通过添加方法更新您的Where
子句
.Where(p=>p.Name==Name | | p.prices.Any(ay=>ay.AwardYear==year))
.选择(…)
//代码的其余部分
既然你想找到
该年内所有获奖者
Any
方法检查序列中的任何元素是否满足条件,在您的情况下,您检查给定的桂冠
的任何奖项是否在给定的年份颁发您可以尝试通过添加方法更新您的Where
子句
.Where(p=>p.Name==Name | | p.prices.Any(ay=>ay.AwardYear==year))
.选择(…)
//代码的其余部分
既然你想找到
该年内所有获奖者
Any
方法检查序列中的任何元素是否满足一个条件,在您的情况下,您正在检查给定的Laureate
的任何奖项是否在给定的一年内颁发谢谢!我不知道。但是它是有效的!对于可能遇到此问题的任何其他人,我还必须在最后添加一个)。谢谢!我不知道,但它很管用!对于其他可能会遇到这种情况的人,我还必须在结尾添加另一个)。