2011-09-13 22 views
-2

我對使用System.Linq.Dynamic程序集中的某些功能有疑問。關於System.Linq.Dynamic的問題

例如,我需要使用像「@」NOT(Person.Name =「」test「」)「這樣的查詢,現在問題是我沒有某個對象類型,而是需要讀取屬性名稱和它們的值(可能是類型,儘管我實際上必須從值中推導出類型)...我通過使用反射(在運行時根據需要創建類型和屬性)來解決此問題......但我仍然想知道是否是可能的,而不創建類型和屬性,但使用匿名類型(我基本上不需要輸入這些類型,只是值...當然,我可以編寫代碼來找出輸入的值的類型引用 - 這意味着它是一個字符串......),或者.Net中有另一個庫用於完成此任務(我沒有太多時間查看Dynamic類......它如何工作等) 。

回答

0

動態Linq解析器總是需要解析實際類型,因爲它將動態表達式解析爲基於類型的System.Linq.Expression表達式樹。但是,Dynamic Linq庫包含一種在運行時快速創建類似匿名類型的方法。下面是使用該示例(取自與DynamicLinq.cs文件一起打包的html文檔文件):

DynamicProperty[] props = new DynamicProperty[] { 
    new DynamicProperty("Name", typeof(string)), 
    new DynamicProperty("Birthday", typeof(DateTime)) }; 
Type type = DynamicExpression.CreateClass(props); 
object obj = Activator.CreateInstance(type); 
t.GetProperty("Name").SetValue(obj, "Albert", null); 
t.GetProperty("Birthday").SetValue(obj, new DateTime(1879, 3, 14), null); 
Console.WriteLine(obj); 
+0

謝謝! - 這是比我使用反射:)所以,如你所說,我仍然有傳遞對象的屬性的類型.... – aly

+0

沒問題,請不要忘記接受這是正確的答案。 – luksan