1

ライブラリ用に、C#を使用してVisual Studio 11で簡単なアプリケーションを作成しています。

簡単に言えば、データベース (SQL Server) とやり取りして、新しい本をデータベースに登録します。

ユーザーは、本の名前、著者、言語、発行年、本の発行者、および本の ID を入力するよう求められます。これらはすべて、 というテーブルの列BookInformationです。と呼ばれる別のテーブルがありますCategories。このテーブルの機能はまだ実装されていないため、今のところ、このテーブルはまったく問題ではありません。

私たちは、雑誌ではなく、常に本について話しています (たとえば)。

データベースに保存されている各書籍のすべての情報を 1 行で表示する適切なクエリを作成する方法を教えてください。

私がこれまでに行ったことは次のとおりです。

var allBooks = from p in db.BookInformation
               where p.CategoryId == "BOOKS"
               orderby p.BookName
               select p;

        Console.WriteLine("All books in database:");
        foreach (var item in allBooks)
        {
            Console.WriteLine(" - {0}, {1}, {2}, {3}, {4}", item.BookName, item.Author, item.Year, item.Language, item.BookId);
        }

それは非常に奇妙な結果をもたらし、それが間違っていることは明らかです。

ありがとうございました

編集 - これはそれが生成するSQLです

SELECT 
    [Extent1].[BookId] AS [BookId], 
    [Extent1].[BookName] AS [BookName], 
    [Extent1].[Author] AS [Author], 
    [Extent1].[Publisher] AS [Publisher], 
    [Extent1].[Year] AS [Year], 
    [Extent1].[Language] AS [Language], 
    [Extent1].[CategoryId] AS [CategoryId], 
    [Extent1].[TimeOfRegistrating] AS [TimeOfRegistrating] 
FROM 
    [dbo].[BookInfoes] AS [Extent1] 
WHERE 
    N'BOOKS' = [Extent1].[CategoryId] 
ORDER BY 
    [Extent1].[BookName] ASC
4

1 に答える 1

0

Sql Profilerのインスタンスを読み込み、プロファイリングを開始し、C# LINQ コードを実行して、生成された SQL をキャプチャします。

次に、生成された sql が正しい結果を生成しない理由を特定します。その linq クエリは、彼らが来るのと同じくらい簡単です。たぶん、あなたのデータはあなたが期待しているものではありません。

プロファイラーを使用しない場合のその他のオプションは次のとおりです... http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

アップデート

SQL、およびループと書き込みラインに基づいて、コンソールに出力していないフィールドの削除を除いて、次の SQL とほぼ同じものがコンソールから表示されるはずです。これは、SQL と同じです。 :

SELECT 
    [Extent1].[BookName] AS [BookName], 
    [Extent1].[Author] AS [Author], 
    [Extent1].[Year] AS [Year], 
    [Extent1].[Language] AS [Language], 
    [Extent1].[BookId] AS [BookId]
FROM 
    [dbo].[BookInfoes] AS [Extent1] 
WHERE 
    N'BOOKS' = [Extent1].[CategoryId] 
ORDER BY 
    [Extent1].[BookName] ASC

そうでない場合、これまでに述べたことはすべて、2 つの出力がほぼ同じであることを示しているため、理由に関する情報が不足しています。

別の注意allBooks.Count()として、SQL から返される行数と同じ数を返す必要があります。

于 2012-05-24T19:55:55.573 に答える