好的,我發現很多網站提到這個問題,但沒有一個完全符合我需要做的。我有一個程序根據我從亞馬遜網絡服務收集的數據生成大量數據表。我正在嘗試編寫一個函數,它允許我在提供的數據表的任何列中搜索特定的字符串。LINQ查詢字符串
在我的程序的版本1,我手動建立我的查詢基於預定義的表結構:
newbie = RawEC2Results.AsEnumerable().Where(p => p.Field<string>("AccountID").Contains(FilterTagText.Text) ||
p.Field<string>("Profile").Contains(FilterTagText.Text) ||
p.Field<string>("Region").Contains(FilterTagText.Text) ||
p.Field<string>("Name").Contains(FilterTagText.Text) ||
p.Field<string>("InstanceID").Contains(FilterTagText.Text) ||
p.Field<string>("AvailabilityZone").Contains(FilterTagText.Text) ||
p.Field<string>("Platform").Contains(FilterTagText.Text) ||
p.Field<string>("Status").Contains(FilterTagText.Text) ||
p.Field<string>("Events").Contains(FilterTagText.Text) ||
p.Field<string>("EventList").Contains(FilterTagText.Text) ||
p.Field<string>("Tags").Contains(FilterTagText.Text) ||
p.Field<string>("Priv_IP").Contains(FilterTagText.Text) ||
p.Field<string>("Pub_IP").Contains(FilterTagText.Text) ||
p.Field<string>("Pub_DNS").Contains(FilterTagText.Text) ||
p.Field<string>("State").Contains(FilterTagText.Text) ||
p.Field<string>("vType").Contains(FilterTagText.Text) ||
p.Field<string>("iType").Contains(FilterTagText.Text) ||
p.Field<string>("SecurityGroups").Contains(FilterTagText.Text));
這是繁瑣的維護,因爲我必須更新我每次更改列添加新數據。我可以生成一個字符串來生成基於任何給定表的查詢,但無法弄清楚如何處理它。
string nocasequery = "p=> ";
int colno = Table2Filter.Columns.Count;
for (int i =0; i < Table2Filter.Columns.Count ;i++)
{
if (i == colno)
{
CASEquery += @"p.Field<string>(""+Table2Filter.Columns[i]+ "").Contains(FilterTagText.Text) ; ";
nocasequery += @"p.Field<string>(""+Table2Filter.Columns[i]+ "").ToLower().Contains(FilterTagText.Text) ; ";
}
那麼,有什麼想法?這不是一個數據庫,我發現的例子在datatable上不起作用。如果我只是將這個字符串傳遞給Where子句,我的工作就完成了。我無法弄清楚如何用其他方式構建這個查詢,而不是通過手工來完成,這就打擊了chunkskis。或者如果有一種方法可以告訴Linq在沒有明確地將它們發出的情況下搜索每一列?