2012-07-30 76 views
1

我正在做一個搜索成員的函數,我想爲我的searchResults變量添加一個Where。然而,在我可以這樣做之前,它可能需要成爲IQueryable。搜索 - IQueryable Linq

這是我想要完成的任務:

var searchResults = listMembers.DataSource = members.getAllMembers().OrderByDescending(x => x.createdDate).Select(x => new 
    { 
     x.ID, 
     x.memberNumber, 
     x.name, 
     x.email, 
     x.birthDate, 
     hasPayed = Helper.renderBoolImage(x.hasPayed, true), 
     isConfirmed = Helper.renderBoolImage(x.isConfirmed, true), 
     isExportedToExcel = Helper.renderBoolImage(x.isExportedToExcel, true) 
    }); 

    if (!String.IsNullOrEmpty(search.name)) 
    { 
     searchResults = searchResults.Where(x => x.name.ToLower().Equals(enc(search.name.ToLower()))); 
    } 

此行不,雖然編譯,因爲它不能解析其中:在頂部

searchResults = searchResults.Where(x => x.name.ToLower().Equals(enc(search.name.ToLower()))); 
+1

對於不區分大小寫的相等性檢查,使用'a.Equals(b,StringComparison.InvariantCultureIgnoreCase)'(或其他文化,如果適用)。如果您必須自己轉換字符串,則應該使用「ToUpperInvariant」而不是「ToLower」。請參見[在.NET Framework中使用字符串的最佳實踐](http://msdn.microsoft.com/zh-cn/library/dd465121.aspx) – phoog 2012-07-30 14:54:44

+0

@phoog感謝您的建議! :) – KLIM8D 2012-07-30 16:49:16

回答

6

這就是問題所在:

var searchResults = listMembers.DataSource = members.getAllMembers()... 

你應該使用:

var searchResults = members.getAllMembers()...; 

if (!String.IsNullOrEmpty(search.name)) 
{ 
    searchResults = searchResults.Where(...); 
} 

listMembers.DataSource = searchResults; 

目前的searchResults類型是一樣的listMembers.DataSource類型,members.getAllMembers...

類型

一般來說,我建議不要像您的原始代碼()) - 它使代碼更混亂,因爲你已經發現...

+0

感謝您的答覆。你會如何建議我應該執行這個操作 - 因爲你不喜歡多任務。搜索對象包含6個我需要檢查的值,所以它不僅是名稱。 – KLIM8D 2012-07-30 16:48:32

+0

@ KLIM8D:目前還不清楚你的意思。你是否希望*將'DataSource'屬性設置爲未過濾的值?目前還不清楚你爲什麼要使用多個任務。 – 2012-07-30 16:50:23

+0

在這個方法結束時,我想將'DataSource'屬性設置爲過濾值(searchResults)。變量'search'是一個包含6個變量的內部類 - 它們都是可以爲空的。我不確定是否需要搜索此搜索對象中的所有內容 - 因爲它們中的一些可能爲null。 所以我腦海裏有6個與主題中的語句幾乎相似的語句。 – KLIM8D 2012-07-30 16:59:25

-1

你有using System.Linq;你文件?你至少使用.NET 3.5嗎?