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
Entity framework 具有多个Where-Average的动态Linq查询_Entity Framework_Linq - Fatal编程技术网

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的项目
现在,我希望能够合并这些查询。例如,我的意思是同时获得平均评分为2、3和4的项目

 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 }
      }
    }
  };