2012-05-24 5 views
1

Я создаю простое приложение в Visual Studio 11 с C# для библиотеки.Поиск правильного запроса linq to sql

Простыми словами он взаимодействует с базой данных (SQL Server) для регистрации новой книги в базе данных.

Пользователю предлагается ввести имя книги, автора, язык, год, издатель книги и идентификатор книги. Все эти столбцы указаны в таблице с именем 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); 
     } 

Это дает очень странные результаты, и его ясно, что wrong.What я должен делать, какие-либо идеи?

Спасибо

Edit - Это 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 
+0

Что странно? – leppie

+0

Можете ли вы опубликовать результаты? Это недостаточно конкретная информация для продолжения. – Killnine

ответ

0

Загрузите экземпляр Sql Profiler, начать профилирование, запустить C# LINQ код и захватить SQL он генерирует.

Затем определите, почему генерируемый SQL-код не дает правильных результатов. Этот запрос linq примерно такой же простой, как и они. Возможно, ваши данные не то, что вы ожидаете от этого.

Вот другие варианты для тех, кто из вас без профайлера ... http://www.thereforesystems.com/view-query-generate-by-linq-to-sql/

Update

Основываясь на вашем 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.

+0

Спасибо за ответ. Я проверю его сейчас :). –

+0

Вывод чего, sql при его выполнении? Или ваш запрос linq? То, что я делал, заключается в том, что ваша проблема не совсем определена, я пытался помочь вам отследить, где она может быть. –

+0

Созданный запрос sql кажется мне хорошим: SELECT [Extent1]. [BookId] AS [BookId], [Extent1].[BookName] AS [BookName], [Extent1]. [Автор] AS [Автор], [Extent1]. [Издатель] AS [Publisher], [Extent1]. [Year] AS [Year], [Extent1 ] [Язык] AS [Язык], [Extent1]. [CategoryId] AS [CategoryId], [Extent1]. [TimeOfRegistrating] AS [TimeOfRegistrating] FROM [dbo]. [BookInfoes] AS [Extent1] ГДЕ . = N'BOOKS»[Extent1] [CategoryId] ORDER BY [Extent1] [BookName] ASC –

Смежные вопросы