2014-05-07 32 views
-4

如何查詢類型T的集合,返回T的所有項,其中任何T的屬性包含一些字符串?LINQ查詢的任何屬性都包含字符串

編輯:

假設我的每個屬性轉換爲字符串檢查之前,如果包含。

+0

到目前爲止您嘗試過做什麼,以及您在實施過程中遇到了哪些問題? – Servy

+0

'42'是否包含任何字符串?也許一些示例代碼會使問題更加清晰...... –

+0

@Downvoter請在評論中說明理由。試着幫忙。 –

回答

9

你的意思是這樣的嗎?

list.Any(x => x.GetType() 
      .GetProperties() 
      .Any(p => 
      { 
       var value = p.GetValue(x); 
       return value != null && value.ToString().Contains("some string"); 
      })); 

,如果你得到的類型和性質只有一次這可能是更有效的:

var type = list.GetType().GetGenericArguments()[0]; 
var properties = type.GetProperties(); 
var result = list.Any(x => properties 
      .Any(p => 
      { 
       var value = p.GetValue(x); 
       return value != null && value.ToString().Contains("some string"); 
      })); 

注:,如果你想查詢任何屬性是否包含一些字符串,使用Any,如果您還想獲得符合您標準的項目,請使用Where方法而不是第一個Any。使用list.Where(x => properties.Any(...));

+0

爲什麼downvotes? – Kevin

+0

接受這個答案,因爲它有2個例子。謝謝。 – eomeroff

+0

的確更高效。我想,你應該把第一個Any取代爲Where。 –

3

你可以使用反射(這個版本效率不高,但你有想法)。

myList.Where(m => m.GetType().GetProperties().Any(x => x.GetValue(m, null) != null && x.GetValue(m, null).ToString().Contains("someString")); 
+0

謝謝,我想我必須去反思。 – eomeroff

+0

@eomeroff相對於? – Servy

+0

@Servy與編譯時知道屬性相反。這是我對效率警告的迴應。 – eomeroff

相關問題