Моя основная потребность - получить типы данных из анонимного типа, сгенерированного из запроса LINQ to SQL.
У меня есть фрагмент кода (более умный, чем я мог бы написать, поскольку я особо не углублялся в рефлексию), который возвращает типы данных из анонимных типов и отлично работает для элементов, помеченных как «не допускающие значения NULL» в свойствах linq2sql. Итак, если у меня есть строка, она вернется как System.String. Однако, когда элемент имеет значение NULL, я получаю его полное имя:
{Name = "Nullable1" FullName = "System.Nullable
1 [[System.Decimal, mscorlib, Version = 4.0.0.0, Culture = нейтральный, 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
Хотя кажется, что он возвращает «строку» типа, а не фактического типа, что мне и нужно. Не знаю, как преобразовать такую вещь.
Всем огромное спасибо.