2013-07-22 2 views
0

단일 값 (예 : 'ABC')이 포함될 수있는 간단한 문자열 필드가있는 SQL 테이블이 있거나 파이프로 구분 된 목록이 포함될 수 있습니다 ('|') 문자 (예 : 'ABC | EDF | GHI'와 같이).LINQ를 사용하여 DB 테이블에 값이 있는지 확인

SharePoint 목록이 있고 내 SP 목록의 모든 값이 SQL 테이블에 있는지 확인하려면 SQL 필드에 단일 값만 있다고 가정하면 쉽게 수행 할 수 있습니다.

var listitems = from SPListItem item in spList.Items 
       where item[myfieldname].Equals(valueImChecking) 
       select item; 

동일한 접근법을 사용하여 '|'로 구분 된 값 목록이 포함되어 있다고 가정 할 때 어떻게 동일한 SQL 필드를 검사합니까? 이 필드의 값이 'ABC | EDF | GHI'이고 'GHI'가 포함되어 있는지 확인하면 LINQ에서 쿼리를 어떻게 작성합니까?

TIA, - 토니.

+0

String.Split 메서드가 필요하다고 생각합니다. 불행히도, Linq-to-SQL에는 존재하지 않습니다 ([split field a linq의 문자열] (http://stackoverflow.com/questions/9283752/split-field-a-string-in-a-linq)). 그래서 당신은 (IQueryable을'IEnumerable'로 변환하여) 로컬 컴퓨터 메모리로 데이터를 가져 와서 필드를 처리해야 할 수도 있습니다. –

+0

@ 토니 : 내 대답 아래의 세드릭 비뇽 (Cédric Bignon)의 의견을 참조하십시오. 이게 너가 찾고있는거야? – shahkalpesh

+0

@shahkalpesh : 네, 그렇게 믿습니다. 감사. – Tony

답변

0
var listitems = from SPListItem item in spList.Items 
       where item[myfieldname].ToString().Contains(valueImChecking) 
       select item; 

Contains 문자열의 메소드가 도움이됩니다.

+0

'포함'했지만 작동하지 않습니다. [myfieldname] 이후에 얻은 유일한 IntelliSense 선택 항목은 다음과 같습니다.
동등한
GetHashCode
GetType
ToString – Tony

+0

인텔리 센스가 작동하지 않으면 코드가 컴파일 되나요? 'Contains'를 수행 할 수 있도록 필드 값에 ToString을 호출하는 응답을 수정했습니다. – shahkalpesh

+0

'item [myfieldname] '에있는 모든 항목의 크기가 동일한 경우에만 작동합니다. 그렇지 않으면 잘못된 결과가 발생할 수 있습니다. –

0

값을 분할하여 별도의 테이블에 기록하는 것이 좋습니다. 나중에 조회를 원하면 동일한 필드에 여러 값을 저장하는 것이 좋은 디자인이라고 생각하지 않습니다.

데이터베이스를 변경하지 않으려면 shahkalpesh의 대답을 사용할 수 있습니다. 그러나 일부 값에 WXYZXYZ이 포함 된 다른 값이 포함될 수있는 경우 가능한 후보 목록 만 표시됩니다. 당신은 메모리 내 결과를 확인해야합니다

// this filters for possible candidates 
var candidates = from item in spList.Items 
       where item[myfieldname].ToString().Contains(valueImChecking) 
       select item; 

// this filters the result using ling-to-objects 
var listItems = from candidate in candidates.AsEnumerable() 
       where candidate[myfieldname].ToString().Split('|').Contains(valueImChecking) 
       select candidate; 

는 Linq에 - 투 - 객체에 AsEnumerable 스위치를 사용하여. LINQ to SQL은 Split을 지원하지 않기 때문에이 작업이 필요합니다.

shahkalpesh의 답변에서 가져온 첫 번째 쿼리를 사용하여 일부 사전 필터링을 수행 할 수 있습니다.
Items 테이블이 작 으면 모든 것을 메모리에로드하고 ling-to-objects (두 번째 쿼리 만 사용)로 확인하는 것이 좋습니다.

관련 문제