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语句?
如果你用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.MovieIds与movies.以这种方式,行在必要时"倍增".
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |