Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Where子句中使用Or和Select将所有条目与int、lambda表达式进行比较_C#_Linq_Select_Lambda_Where Clause - Fatal编程技术网

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
的任何奖项是否在给定的一年内颁发

谢谢!我不知道。但是它是有效的!对于可能遇到此问题的任何其他人,我还必须在最后添加一个)。谢谢!我不知道,但它很管用!对于其他可能会遇到这种情况的人,我还必须在结尾添加另一个)。