2015-02-03 3 views
0

where 조건이 다음 코드에 적용되지 않는 이유는 무엇입니까? 검색 할 때 결과가 필터링되지 않습니다. 디버그 할 때 searchString에는 값이 있고 실행은 _data.Where 절을 통과하지만 필터링 된 결과를 반환하지 않습니다.LINQ to SQL - 필터링 된 WHERE 절

내가 여기서 잘못하고있는 것은 무엇입니까?

IQueryable<UserViewModel> _data = (
    from a in context.aspnet_Users 
    join b in context.aspnet_Membership on a.UserId equals b.UserId 
    where b.IsApproved == true 
    select new UserViewModel 
    {         
     UserId = a.UserId, 
     UserName = a.UserName, 
     FirstName = a.FirstName, 
     LastName = a.LastName, 
     EmailAddress = b.Email         
    }) 
    .OrderBy(a => a.FirstName) 
    .ThenBy(b => b.LastName); 

if (!String.IsNullOrEmpty(searchString)) 
{     
    _data = _data 
     .Where(x => x.FirstName.Contains(searchString)) 
     .Where(y => y.UserName.Contains(searchString)) 
     .Where(y => y.LastName.Contains(searchString)) 
     .Where(y => y.EmailAddress.Contains(searchString)); 
} 
+0

두 번째 쿼리 만 관련 있다고 가정합니다. 이 쿼리는 FirstName * 및 * UserName * 및 * LastName * 및 * Email이 모두 같은 문자열로 시작하는 레코드를 찾습니다. 내 생각에 당신이 원한 것 같아요 그들 중 하나라도 검색 문자열로 시작하는지 검사합니다. –

+0

어떻게이 결과를 확인 했습니까? 필터링되지 않은 데이터 란 무엇이며 검색 문자열은 무엇이며 필터링 된 데이터는 무엇입니까? 주어진 레코드에 대해 해당 필드의 4 개 * 모두에 존재하는 검색 문자열을 사용하고 있습니까? – David

답변

0

:

나는 이러한 필드의 검색 문자열로 시작하는지 확인하는 쿼리, 예를 무엇 당신이 원하는 생각

_data = _data.Where(x => x.FirstName.Contains(searchString)) 
      .Where(y => y.UserName.Contains(searchString)) 
      .Where(y => y.LastName.Contains(searchString)) 
      .Where(y => y.EmailAddress.Contains(searchString)); 

searchString 그 분야의 네에 존재해야합니다. 따라서 "David"를 검색하면 내 LastName에 해당 문자열이 포함되어 있지 않아 내 레코드를 찾지 못합니다.

논리 대신 논리 또는을 사용하셨습니까? 다음과 같은 내용 :

_data = _data.Where(x => x.FirstName.Contains(searchString) || 
         x.UserName.Contains(searchString) || 
         x.LastName.Contains(searchString) || 
         x.EmailAddress.Contains(searchString)); 
+0

예, 당신은 정확하고 그 부분을 놓쳤습니다. –

1

두 번째 쿼리는 모두 그 사용자 FIRSTNAME 사용자 이름 이메일, 즉 모든 필터링 필드는 검색 문자열로 시작하는 기록에 대한 검사를 작성하는 방법은 시작 같은 문자열. 난 당신이 예상 한 것보다 이것이 더 "필터링"을 많이하고있다 의심

_data = _data.Where(x => x.FirstName.Contains(searchString) || 
         x.UserName.Contains(searchString) || 
         x.LastName.Contains(searchString) || 
         x.EmailAddress.Contains(searchString));