2012-05-24 4 views
1

Visual Studio 11에서 C#을 사용하여 간단한 응용 프로그램을 라이브러리 용으로 만듭니다.SQL 쿼리에 적절한 linq 검색

간단히 말하면 데이터베이스 (SQL Server)와 상호 작용하여 새 책자를 데이터베이스에 등록합니다.

사용자는 책 이름, 저자, 언어, 연도, 출판사 및 서적 ID를 입력하라는 메시지가 표시됩니다.이 중 하나는 BookInformation이라는 테이블의 열입니다. Categories이라고하는 다른 테이블이 있습니다. 지금이 테이블에 대한 기능이 아직 구현되지 않았으므로이 테이블은 전혀 중요하지 않습니다.

우리는 잡지 (예를 들어)가 아닌 책을 항상 말하고 있습니다.

데이터베이스에 저장된 각 책에 대한 모든 정보를 한 줄에 표시하는 적절한 쿼리를 만드는 방법을 묻습니다.

I는 지금까지 무슨 짓을 :

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); 
     } 

그것은, 어떻게해야 어쩌라고 아이디어입니다 매우 이상한 결과를 제공, 그 명확한?

당신에게

편집 감사 - 이것은, 프로파일 링을 시작하여 C#을 LINQ 코드를 실행하고 생성하는 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의 인스턴스를 생성하는 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에서 반환 된 행 수와 동일한 수를 반환해야합니다.

+0

답장을 보내 주셔서 감사합니다. 지금 확인하겠습니다 :). –

+0

당신이 그것을 실행할 때 SQL의 출력은 무엇입니까? 아니면 linq 쿼리? 내가 작성한 요점은 당신의 문제가 잘 정의되어 있지 않다는 것입니다. 나는 당신이 어디에 있는지 추적 할 수 있도록 도와 주려고했습니다. –

+0

생성 된 SQL 쿼리가 나에게 잘 보입니다. SELECT [Extent1]. [BookId] AS [BookId], [Extent1].[게시자] AS [게시자], [Extent1]. [Year] AS [Year], [Extent1] [게시자] AS [게시자] AS [게시자], [게시자], [Extent1]. ] [Language] AS [Extent1]. [CategoryId] AS [CategoryId], [Extent1]. [TimeOfRegistrating] AS [TimeOfRegistrating] FROM [dbo]. [Bookentfoes] AS [Extent1] WHERE . Extent1] BY N'BOOKS '=은 [Extent1] [카테고리 ID] ORDER [bookname과] ASC –

관련 문제