2013-03-20 5 views
0

나는 linq을 처음 사용했습니다. 데이터베이스의 3 개 필드를 검색 할 linq 쿼리를 작성하려고합니다. 그러나 필드 중 하나가 공백이거나 아무것도없는 경우에는 쿼리의 해당 필드가 포함되지 않습니다.linq의 여러 열에서 검색

검색 개체

Public Class Search 
    Public Property firstName As String 
    Public Property surname As String 
    Public Property address As String 
End Class 

테이블

CREATE TABLE [dbo].[user] (
[id] [int] IDENTITY(1,1) NOT NULL, 
[firstName] [nvarchar](50) NULL, 
[surname] [nvarchar](50) NULL, 
[fullAddress] [nvarchar](1050) NULL 

내 시도를하지만이

(From it In db.user 
Where (
    searchItems.firstName IsNot Nothing 
    AndAlso it.firstName.Contains(searchItems.firstName)) 
AndAlso (searchItems.surname IsNot Nothing 
    AndAlso it.surname.Contains(searchItems.surname)) 
AndAlso (searchItems.address IsNot Nothing 
    AndAlso it.fullAddress.Contains(searchItems.address)) 
Select it). 
ToList 

은 또한 I 250 개 기록

이를 제한 할 필요가 다시 데이터받지 않습니다

미리 감사드립니다. Paul

+0

_ "250 레코드를 제한하는 방법"_은 'Take 250'을 사용합니다. 바깥의'Where' 조건에서'AndAlso' 대신'OrElse'를 사용하고 싶지 않으십니까? –

답변

0

각 문자열 검사는 값이 빈 문자열 ("")이 아닌지 추가적으로 확인해야합니다. 각 문자열 검사에 추가 체크를 추가하면 다음과 같이 수행 할 수 있습니다.

(From it In db.user 
Where (Not String.IsNullOrEmpty(searchItems.firstName)) Or (it.firstName.Contains(searchItems.firstName)) 
AndAlso (Not String.IsNullOrEmpty(searchItems.surname) Or (it.surname.Contains(searchItems.surname)) 
AndAlso (Not String.IsNullOrEmpty(searchItems.address) Or (it.fullAddress.Contains(searchItems.address)) 
Select it).Take(250).ToList 
관련 문제