搜索正确的 linq to sql 查询
Posted
技术标签:
【中文标题】搜索正确的 linq to sql 查询【英文标题】:Searching for the proper linq to sql query 【发布时间】:2012-05-24 19:47:42 【问题描述】:我正在使用 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
【问题讨论】:
你能发布结果吗?信息不够具体。 【参考方案1】:加载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
如果你不是,那么我们缺少一些关于原因的信息,因为到目前为止你所说的一切都表明两者的输出大致相同。
另外注意,allBooks.Count()
应该返回与从您的 sql 返回的行数相同的数字。
【讨论】:
感谢您的回复。我现在去检查一下:)。 输出什么,执行时的sql?还是您的 linq 查询?我的意思是您的问题没有明确定义,我试图帮助您找出问题所在。 生成的 sql 查询对我来说似乎很好: SELECT [Extent1].[BookId] AS [BookId], [Extent1].[BookName] AS [BookName], [Extent1].[Author] AS [作者]、[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跨度> 但是控制台中的输出看起来像: -,"someauthor", -, sielaSoft, -1991, , .. 似乎它查询数据库中的每个项目,它为每个项目(作者,书名,年份..)提供一个新行,并且在控制台的每一行上它只写一个项目。我怀疑你无法理解我的意思,但这对我来说很奇怪,而且很难解释,所以我很抱歉:S. 只是解释一下,这是我第一次尝试使用 sql :)以上是关于搜索正确的 linq to sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to SQL查询中的C#Dynamic WHERE子句
如何在 LINQ 和 Lambda 表达式 LINQ C# 上正确执行 SQL 查询