2009-12-04 2 views
0

좀 더 복잡한 검색을 구현하려는 WPF 프로젝트를 준비합니다. ADO.NET Entity 모델을 통해 엔티티에 LINQ를 사용하고 WPFToolkit DataGrid에서 디스플레이를 수행 할 계획입니다.WPF 및 Linq - 엔티티 모델을 사용하여 데이터베이스를 검색하는 방법

내 검색 창에서는 몇 가지 다른 기준으로 검색 할 수 있습니다. 내 생각은 응용 프로그램에서 이름, 성 및 직업 텍스트 상자에 (예를 들어) 쓸 수 있고 모든 세 검색 매개 변수에 해당하는 선택한 테이블의 모든 사람 목록을받을 수있게하는 것입니다. 나는 모두가 입력되거나 심지어 하나만 입력 되더라도 검색 할 수 있기를 원합니다.

나는 다른 옵션은 데이터베이스에 폼을 바인딩하는 것으로 가정 ... 여전히 내가 정보를 표시하는 방법을 알고있다 (이런 식으로 검색을 편집 및 삽입 ...하지만 검색 할 방법을 모른다).

비록 쿼리 메커니즘에 문자열을 적용했지만 헛된 것이 었습니다. 작동하지 않는 것 같습니다. 내가 어떻게이 일을 할 수 있는지에 대한 아이디어를 나눠주세요. 모든 소스 또는 코드 조각을 높이 평가할 것입니다.

감사합니다.

답변

1

Linq를 사용하면 간단 빌딩 블록에서 그들을 구축 할 수 있도록 정말 쉽게 쿼리를 구성 할 수 있습니다. 이와 같은 시스템을 위해 갈 수있는 다양한 레벨도 있습니다. 일반 쿼리 형식이 정적 인 표준 Linq 쿼리가있는 시스템을 가질 수 있지만 사용자 지정 쿼리 설명 형식을 사용하여 Linq 문으로 변환 할 수 있습니다.

귀하의 경우에는 몇 가지 가능한 필터가있는 것 같습니다. 이에이 유사 할 수 있습니다 :

var Query = Context.MyDataSet; //Whatever is the standard base query 

if (!string.IsNullOrEmpty(NameFilter)) 
    Query = Query.Where(e => e.Name.Contains(NameFilter)); 

if (!string.IsNullOrEmpty(SurnameFilter)) 
    Query = Query.Where(e => e.Surname.Contains(SurnameFilter)); 

... 

var Result = Query.ToList(); 

은 당신이 사용자가 검색 할 수있는 매개 변수의 고정 세트를 가지고, 당신은 선택적으로 필터를 추가하여 건물 쿼리의이 방법으로 꽤 멀리 갈 수 있습니다.

+0

좋습니다. 이것은 정신입니다. 이를 바탕으로 변수를 이해하면서 솔루션을 얻었습니다. 이것은 내가 엔티티를 사용할 수있게 해줍니다 ... 위의 응답은 괜찮지 만 도랑의 엔티티 사용이 필요합니다. 당신에게 크리스 감사 :) 편집 :! Canott 암시 'System.Linq.IQueryable을 <유형을 변환 : 미래에 누군가) – Branimir

+0

이상한 ...이 반환에 필요한 경우 내 솔루션은 ... 위의 제 질문에 추가 WpfEfDataLayer.Patients> 'to'System.Data.Objects.ObjectQuery . 명시 적 변환이 존재합니다 (캐스트가 누락 되었습니까?) – Branimir

+0

NameFilter 필드에서 검색 텍스트 상자의 텍스트를 사용한다는 사실을 잊어 버렸습니다. – Branimir

0

데이터베이스에 일반 엔티티 개체의 트리거로 채워지는 검색 테이블을 만들 수 있습니다. 검색 테이블은 EntityTableName, EntityTableID, EntityDescriptionString이 될 수 있습니다. 엔터티 설명 문자열은 관련 검색 가능 필드를 결합하여 엔터티를 삽입 할 때 생성되는 문자열입니다. 그런 다음 SQL에서 표준 LIKE 쿼리를 사용하거나 Linq2SQL에서 .Contains를 사용합니다.

검색이 힘듭니다!

0

당신은 당신을 위해이 작업을 수행하는 SQL에 저장 프로 시저를 작성할 수 다음 LINQ 엔티티에 추가합니다.

Stored Proc는 3 개의 매개 변수를 취한 다음 쿼리를 수행합니다.

는 값이 빈 문자열 (사용자가 아무 것도 입력하지 않은) 당신이 그것을 필터링하기 위해 또는 절을 추가 할 수있을 수 있습니다 경우를 처리합니다.

잠시 후에 SQL을 작성하지 않았으므로 즉시 실행되지 않을 수 있습니다. 잘하면 당신은 생각을 얻는다.

0

좋아, 내가 가진 마지막 해결책은 여기에있다.

var sQuery = from x in dataContext.Patients 
      select x; 
if (!string.IsNullOrEmpty(serName.Text)) 
    sQuery = sQuery.Where(x => x.Name.Contains(serName.Text)); 

if (!string.IsNullOrEmpty(serSurame.Text)) 
    sQuery = sQuery.Where(x => x.Surname.Contains(serSurame.Text)); 

도움을 주셔서 감사합니다.

관련 문제