Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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# 如何加入实体dotnetcore/linq?_C#_Sql_Entity Framework_Linq_Join - Fatal编程技术网

C# 如何加入实体dotnetcore/linq?

C# 如何加入实体dotnetcore/linq?,c#,sql,entity-framework,linq,join,C#,Sql,Entity Framework,Linq,Join,我有以下疑问 SELECT * FROM Movie m INNER JOIN ( SELECT movie_id, COUNT(movie_id) as amount FROM Watchhistory WHERE watch_date >= DATEADD(day,-3000, GETDATE()) GROUP BY movie_id ) as a on m.movie_id = a.movie_id ORDER BY a.amount DESC 以

我有以下疑问

SELECT *
FROM Movie m INNER JOIN
(
    SELECT movie_id, COUNT(movie_id) as amount
    FROM Watchhistory
    WHERE watch_date >=  DATEADD(day,-3000, GETDATE())
    GROUP BY movie_id
) as a on m.movie_id = a.movie_id
ORDER BY a.amount DESC
以及下表:

我现在的尝试是:
var movies=\u context.Movie
.AsNoTracking()
.加入(
_context.Watchhistory.Where(
w=>w.WatchDate>=Convert.ToDateTime(DateTime.Now).AddDays(-14))
.GroupBy(w=>w.MovieId)
.Select(m=>new{amount=m.Count(),mID=m.Key})
.OrderByDescending(a=>a.amount)
.Select(a=>new{movieid=a.mID}),
m=>m.MovieId,w=>w.MovieId,(m,w=>m);


我似乎无法让它在c#dotnet实体中工作。如何在linq中使用右外部联接?

在linq中很少使用联接。相反,只需编写查询来导航模型

所以

变得像:

    var q = from m in db.Movies
            select new {m.MovieID,m.Name, amount = m.WatchHistory.Where( w => w.WatchDate >= ...).Count() };

   var results = q.Where( m => m.amount > 0).OrderByDesc( m => m.amount).ToList();

David

让我们看看你都做了些什么,为什么你甚至需要一个正确的外部连接?假设外键设置正确,则
movie
表中不存在
movie
表中的
movie\u id
。一个内部连接就足够了。不要再考虑sql了,想想linq吧“右外部联接”是一个sql概念@GarethD是对的,谢谢你!哇,真糟糕。内部连接确实更好(我怎么会这么愚蠢)<代码>var movies=\u context.Movie.AsNoTracking().Join(\u context.Watchhistory.Where(w=>w.WatchDate>=Convert.ToDateTime(DateTime.Now).AddDays(-14)).GroupBy(w=>w.MovieId).选择(m=>new{amount=m.Count(),mID=m.Key}).OrderByDescending(a=>a.amount).选择(a=>new{MovieId=a.mID}),m=>m.MovieId,w=>w.MovieId,(m,w=>m)请参见编辑。
    var q = from m in db.Movies
            select new {m.MovieID,m.Name, amount = m.WatchHistory.Where( w => w.WatchDate >= ...).Count() };

   var results = q.Where( m => m.amount > 0).OrderByDesc( m => m.amount).ToList();