2009-05-19 3 views
2

'VARBINARY (max)'형식 (wav 파일 저장)의 'Wav'열이있는 테이블이 있으며 Linq에서 SQL 로의 wav가 있는지 확인할 수 있기를 원합니다.Linq to SQL을 파생 된 열로 변환하는 방법은 무엇입니까?

내 첫 번째 방법은 Linq에에서 다음을 수행 하였다 :

var result = from row in dc.Table 
      select new { NoWav = row.Wav != null }; 

는 RAM 모든 바이너리 컨텐츠를 retreive 것입니다 위의 코드의 문제, 이것은 (좋은 느리고 메모리를 배가 아니다).

SQL에서 bellow와 비슷한 형태로 Linq 쿼리를 어떻게 변환 할 수 있습니까?

SELECT (CASE WHEN Wav IS NULL THEN 1 ELSE 0 END) As NoWav FROM [Update] 

답변

1

감사를 더 WAV를 표시하지 않을 것이다. 그들은 모두 의미가 있습니다. 사실, Linq 이어야합니다! = null을 올바르게 번역해야하지만 효과적으로 실행하지 못했습니다. 내 코드를 실행하면 속도가 느려지므로 내 설명은 RAM으로 전송 된 이진 데이터를 얻은 것입니다. ..하지만 어쩌면 내가 틀렸어. 그 계산 된 열을 반영하기 위해

ALTER TABLE [Table] 
ADD WavIsNull AS (CASE WHEN [Wav] IS NULL Then (1) ELSE (0) END) 

지금 내 DBML를 업데이트 할 수 있습니다 :

Create a computed column on a datetime가 내 테이블에 대해 다음 쿼리를 실행 :

나는 내가 유래에 어쨌든 다른 곳 주변의 일을 찾은 것 같아요 그것이 어떻게되는지보십시오.

+0

내 DBML의 'Wav'속성이로드 지연으로 설정되어 있습니다. 이상한 동작을 설명합니까? – bounav

+0

디버거에서 명령문을 단계적으로 실행하고 방출 된 실제 SQL 문을 추적하십시오. 그게 당신이 당신의 질문에 명확하게 대답 할 수있는 유일한 방법 일 것입니다 : bruno에서 아래의 답변과 나는 당신의 BLOB을 가져 오지 않는 것이 좋습니다. 속도가 느린 이유는 RAM으로 전송되는 바이너리 데이터와 아무 관련이 없습니다. 느린 부분을 찾기 위해 추적 및 스톱워치 문을 추가하고 쿼리를 찾기 위해 SQL 프로파일 러를 추가하십시오 –

0

이 코드가 데이터를 RAM으로 검색합니까?

from c in Categories 
select new 
{ 
    Description = c.Description != null 
} 

SELECT 
    (CASE 
     WHEN [t0].[description] IS NOT NULL THEN 1 
     ELSE 0 
    END) AS [Description] 
FROM [Category] AS [t0] 
+0

하! 너는 나를 때렸다! LINQPad는 실제로 FTW입니다 –

0

무엇에 대한이 쿼리 :

var result = from row in dc.Table where row.Wav == null 
select row.PrimaryKey 

을 키의 목록은 값이 어디 제안으로 내가 LINQPad 및 생성 된 SQL을 사용하여 몇 가지 테스트를했다

최적화 된 없는. 이와 유사한 SQL 코드를 생성합니다

var result = from row in db.Table 
      select new 
      { Key = row.Key, NoWav = (row.Wav == null ? true : false) }; 

:

SELECT [t0].[WavID] AS [Key], 
    (CASE 
     WHEN [t0].[Wav] IS NULL THEN 1 
     ELSE 0 
    END) AS [NoWav] 
FROM [tblWave] AS [t0] 
0

는 여기 명확하지 않다, 당신의 SQL 코드가를 반환 할 것입니다 널의 목록은 /는 당신이 할 수있는 NULL이 아닌 데이터베이스의 1과 0 목록. 그것은 당신이 찾고있는 것입니까? 당신이 당신의 기록에 대한 ID를 가지고 있다면 당신은 단지에 WAV 필드에 조건을 가진 그 하나의 레코드를 검색 할 수 반환 값 null는, 모든 응답에 대한 즉

var result = from row in dc.Table 
      where (row.ID == id) && (row.Wav != null) 
      select new { row.Wav }; 
관련 문제