我的基本需求是從LINQ to SQL查詢生成的匿名類型中獲取數據類型。通過c#中的反射獲取「基本」數據類型而不是奇怪的數據類型
我有一段代碼(比我能寫的更聰明,因爲我沒有真正鑽研反射),它從匿名類型返回數據類型,並且完美適用於linq2sql中標記爲「不可空」的元素屬性。所以,如果我有一個字符串,它將返回爲System.String。但是,當元素爲空時,我最終會得到它的'全名':
{Name =「Nullable 1" FullName = "System.Nullable
1 [[System.Decimal,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]}}
我想要提取的是這種情況下的System.Decimal類型(以及在字符串或任何情況下,我只想要System.String)。我查看了屬性,找不到任何似乎存儲這些內容的東西。
private static Dictionary<string, Type> GetFieldsForType<T>(IEnumerable<T> data)
{
object o = data.First();
var properties = o.GetType().GetProperties();
return properties.ToDictionary(property => property.Name, property => property.PropertyType);
}
LINQ查詢(我不認爲真正的問題在這裏):
var theData = from r in db.tblTestEdits select new { myitem = r.textField, mydecimal = r.decimalField };
我發現這個鏈接,似乎試圖解決一個類似的事情。
http://ysgitdiary.blogspot.com/2010/02/blog-post.html
雖然它似乎返回類型的「字符串」,而不是實際的類型,這是我所需要的。不知道如何轉換這樣的事情。
非常感謝所有。
太棒了!非常感謝mquander!有趣的是,當我在查看屬性檢查器中的「基礎」屬性時,他們仍然是這些巨大的文本塊。非常感激。 – Glinkot 2011-03-02 23:20:56
調試器的對象檢查器通常需要將所有內容都轉換爲文本以顯示給你,並且它知道如何表達一個通用可爲空類型的最好方式,因爲文本就是一大堆垃圾。 – mquander 2011-03-02 23:34:28
看起來非常真實! – Glinkot 2011-03-04 04:29:10