Entity framework 具有多个Where-Average的动态Linq查询
我可以得到具体结果的平均评分值,如下所示:Entity framework 具有多个Where-Average的动态Linq查询,entity-framework,linq,Entity Framework,Linq,我可以得到具体结果的平均评分值,如下所示: var result1 = items.Where(x => x.Ratings.Average(y => y.MyRate == 1)); var result2 = items.Where(x => x.Ratings.Average(y => y.MyRate == 2)); var result3 = items.Where(x => x.Ratings.Average(y => y.MyRate == 3)
var result1 = items.Where(x => x.Ratings.Average(y => y.MyRate == 1));
var result2 = items.Where(x => x.Ratings.Average(y => y.MyRate == 2));
var result3 = items.Where(x => x.Ratings.Average(y => y.MyRate == 3));
...
- 因此result1只包含平均评分为1的项目
- 因此result2只包含平均评分为2的项目
- 因此result3只包含平均评分为3的项目
var results = items.Where(x => x.Ratings.Average(y => y.MyRate == 2 ||
x.Ratings.Average(y => y.MyRate == 3 ||
x.Ratings.Average(y => y.MyRate == 4));
上面的解决方案不是动态的,因为2、3、4是固定的
假设我有一个可变评级,它是一个评级值列表。如何查询此变量中包含平均评级的所有项目
List<int> ratings = new List<int>() { 2, 3, 4};
var results = items.Where(x => x.Ratings.Average(y => y.MyRate in ratings)); <--- does not work
List ratings=newlist(){2,3,4};
var结果=项目。其中(x=>x.Ratings.Average(y=>y.MyRate in Ratings)) 使用Linq Contains进行测试
List<decimal> ratings = new List<decimal>() { 1, 2, 3, 4 };
var result = items.Where(x => ratings.Contains(x.Ratings.Average(y => y.MyRate)));
使用以下初始化代码
var items = new List<Item>
{
new Item //MyRate average = 1
{
Name = "Toy Story 2",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 1 },
new Rating { MyRate = 1 }
}
},
new Item //MyRate average = 2
{
Name = "Toy Story 3",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 2 },
new Rating { MyRate = 3 }
}
},
new Item //MyRate average = 1.33
{
Name = "Toy Story 4",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 1 },
new Rating { MyRate = 2 }
}
}
};
var items=新列表
{
新项目//MyRate平均值=1
{
Name=“玩具总动员2”,
评级=新列表
{
新评级{MyRate=1},
新评级{MyRate=1},
新评级{MyRate=1}
}
},
新项目//MyRate平均值=2
{
Name=“玩具总动员3”,
评级=新列表
{
新评级{MyRate=1},
新评级{MyRate=2},
新评级{MyRate=3}
}
},
新项目//MyRate平均值=1.33
{
Name=“玩具总动员4”,
评级=新列表
{
新评级{MyRate=1},
新评级{MyRate=1},
新评级{MyRate=2}
}
}
};
不起作用,是否引发异常?您是否尝试过这个var results=items.Where(x=>x.Ratings.Average(y=>Ratings.Any(z=>y.MyRate==z))
?
var items = new List<Item>
{
new Item //MyRate average = 1
{
Name = "Toy Story 2",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 1 },
new Rating { MyRate = 1 }
}
},
new Item //MyRate average = 2
{
Name = "Toy Story 3",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 2 },
new Rating { MyRate = 3 }
}
},
new Item //MyRate average = 1.33
{
Name = "Toy Story 4",
Ratings = new List<Rating>
{
new Rating { MyRate = 1 },
new Rating { MyRate = 1 },
new Rating { MyRate = 2 }
}
}
};