2011-02-11 68 views
6

我们使用以下来生成搜索查询(使用NHibernate)。C#在多个属性上的Lambda .Contains()

GetAll(x => x.Username.ToUpper().Contains(SEARCH)).ToList(); 

是否有可能做多个属性,像搜索(含)...

GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
     && x => x.Firstname.ToUpper().Contains(SEARCH) 
     && x => x.Lastname.ToUpper().Contains(SEARCH)).ToList(); 

使用C#

回答

6
GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
     && x.Firstname.ToUpper().Contains(SEARCH) 
     && x.Lastname.ToUpper().Contains(SEARCH)).ToList(); 

我想像你想要在OR上进行搜索:

GetAll(x => x.Username.ToUpper().Contains(SEARCH) 
     || x.Firstname.ToUpper().Contains(SEARCH) 
     || x.Lastname.ToUpper().Contains(SEARCH)).ToList(); 
+0

谢谢尼克......你是对的。只是我感兴趣的语义。简直不敢相信它很容易...答案+1 – Hugusta 2011-02-11 23:57:56

0

T ry NinjaNye.SearchExtensions

它将允许的语法如下:

var result = GetAll().Search("search", 
          x => x.Username, 
          x => x.Firstname, 
          x => x.Lastname) 
        .ToList(); 

当SQL中使用,这将产生类似如下:

SELECT [Extent1].[Id] AS [Id], 
     [Extent1].[Username] AS [Username], 
     [Extent1].[Firstname] AS [Firstname], 
     [Extent1].[Lastname] AS [Lastname] 
FROM [dbo].[Users] AS [Extent1] 
WHERE ([Extent1].[Username] LIKE N'%search%') 
    OR ([Extent1].[Firstname] LIKE N'%search%') 
    OR ([Extent1].[Lastname] LIKE N'%search%') 

...这意味着所有的工作在数据完成源,而不是在内存

的源代码,看看GitHub的页面:

https://github.com/ninjanye/SearchExtensions