搜索正确的 linq to sql 查询

本文关键字:to sql 查询 linq 搜索 | 更新日期: 2023-09-27 18:35:11

我正在使用C#在Visual Studio 11中创建一个简单的应用程序,用于库。

简而言之,它与数据库(SQL Server)交互以在数据库中注册新书。

系统会提示用户输入图书名称、作者、语言、年份、图书出版商和图书 ID。所有这些都是名为 BookInformation 的表中的列。还有一张表叫做Categories。目前,此表根本不重要,因为此表的功能尚未实现。

我们总是在谈论书籍,而不是杂志(例如)。

我想问你如何进行正确的查询,在一行中显示存储在数据库中的每本书的所有信息。

到目前为止,我所做的是:

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

搜索正确的 linq to sql 查询

加载 Sql 探查器实例,开始分析,运行 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

如果你不是,那么我们缺少一些关于原因的信息,因为到目前为止你所说的一切都指向两者具有大致相同的输出。

另一个注意事项是,allBooks.Count() 应返回与从 sql 返回的行数相同的数字。