簡體   English   中英

C# 如何將 SQL 轉換為 LINQ 查詢

[英]C# How to convert SQL into a LINQ query

我有一個 WinForms 應用程序通過實體框架 (EF 6) 連接到Movies SQL Server 數據庫。

我有以下 SQL,我正在嘗試將其轉換為 LINQ 查詢

SELECT 
    t.movieId,m.Title, t.number_of_files 
FROM 
    (SELECT mlf.movieId AS movieId, COUNT(*) AS number_of_files
     FROM MovieLinkFile mlf, "file" f
     WHERE f.path LIKE 'M:\%'
       AND f.id = mlf.fileId
     GROUP BY mlf.movieId
     HAVING COUNT(*) > 1) t
JOIN 
    Movie m ON t.movieId = m.Id
ORDER BY 
    m.title

這是我在 LINQ 上使用 LINQPad http://www.linqpad.net/的嘗試

from m in Movies
from mlf in Movielinkfiles
from f in Files
where m.Id == mlf.MovieId
      &&  mlf.FileId == Files.id
      && f.path.StartsWith ("M:\\")
.GroupBy(x =>  x.movieId)
.where(c => c.count()  > 1)  // invalid expression
select m

用於連接數據庫的 C# 代碼如下所示

private void LoadMovies()
{
    TitlesLV.Items.Clear();

    using (var context = new MoviesEntities())
    {
        // get a full list of all movies (will return everything from the database)
        var allMovies = context.movies.OrderBy(m => m.title).ToArray();

        foreach(var Movie in allMovies)
        {
            ListViewItem item = new ListViewItem();
            item.Text = Movie.title;
            item.Tag = Movie;

            TitlesLV.Items.Add(item);
        }
    }
}

數據庫中有3個表:

  • 電影(id、標題、年份、IMDB 等)
  • MoviesLinkFiles(id、MovieId、FileId)
  • 文件(id,路徑)

如何在 C# 中編寫 LINQ 語句?

要獲取具有多個以“M:\”開頭的文件的所有電影,請將CountPath.StartsWith表達式一起使用,並檢查 Count 的結果是否大於 1。

var filteredMovies = movies
    .Where(movie => movie.Files
        .Count(file => file.Path.StartsWith("M:\\")) > 1
    )
    .OrderBy(movie => movie.Title);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM