2013-03-20 53 views
0

我是linq的新手。我正在嘗試編寫一個linq查詢,它將在數據庫中的3個字段上進行搜索。但是,如果任何字段爲空或不包含任何內容,那麼它將不會在查詢中包含該字段。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 

此外,我需要這個限制爲250條記錄

在此先感謝 保羅

+0

_「如何限制這250個記錄」_,使用「帶250」。你確定你不想在'Where'的外部條件下使用'OrElse'而不是'AndAlso'嗎(括號裏有提示)? – 2013-03-20 11:18:33

回答

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