1

我正在使用 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
4

1 回答 1

0

加载Sql Profiler的实例,开始分析,运行 C# LINQ 代码,并捕获它生成的 sql。

然后,确定它生成的 sql 为什么没有产生正确的结果。那个 linq 查询就这么简单。也许您的数据不是您所期望的。

对于那些没有探查器的人,这里有其他选择... http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

更新

根据您的 sql,以及您的循环和 writeline,您应该在控制台中看到与以下 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 返回的行数相同的数字。

于 2012-05-24T19:55:55.573 回答