如何使用linq检索多个唯一ID的实例?

0 c# linq entity-framework asp.net-web-api

我在我的API中有一个post动作,它根据从视图模型中检索的一些数据创建一个订单.

它需要能够从通过视图模型传递给它的"电影"表中检索所有电影并创建订单.视图模型将操作传递给需要检索的电影的ID.

我有一个有效的解决方案,当提供这样的动作数据时,它有效:

{
     "movieIds": [34, 35],
     "customerId": 21
}
Run Code Online (Sandbox Code Playgroud)

数据库:

在此输入图像描述

但是,当我提供包含两个或多个具有相同Id的电影的动作数据时,它只会保存一部电影.

{
     "movieIds": [34, 34],
     "customerId": 21
}
Run Code Online (Sandbox Code Playgroud)

数据库:

在此输入图像描述

在调试代码之后,我发现这是导致问题的linq语句,它只会将电影的一个实例保存为"电影".

movies = _context.Movies.Where(m => newRental.MovieIds.Contains(m.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么这样做?以及如何构造一个允许它保存多个ID的linq语句?

xan*_*tos 5

如果你用SQL术语思考,你所要求的是非常复杂的(不是太多,但实体框架LINQ翻译器到SQL可能是不可能的).

最简单的解决方案是在查询后将行乘以C#-side.

var movies = _context.Movies.Where(m => newRental.MovieIds.Contains(m.Id)).ToList();

var movies2 = (from x in newRental.MovieIds
               join y in movies on x equals y.Id
               select y).ToList();
Run Code Online (Sandbox Code Playgroud)

我们join("内在")newRental.MovieIdsmovies.以这种方式,行在必要时"倍增".