2013-03-20 2 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 записей

Заранее спасибо Paul

+0

_ «как ограничить это до 250 записей» _, используйте 'Take 250'. Вы уверены, что не хотите использовать 'OrElse' вместо' AndAlso' во внешних условиях 'Where' (предлагаются скобки)? –

ответ

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 
Смежные вопросы