搜索正确的 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
加载 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 返回的行数相同的数字。