Этот вопрос является продолжением этого вопроса: Как создать список из двух значений
Рассмотрим этот код:
class MainClass()
{
string MainKey {get;set;}
string MainName {get;set;}
IEnumerable<SmallObject> MainList {get;set}
}
class SmallObject()
{
string SmallKey {get;set}
}
и:
var mainQuery = (from v from DataContext.myTable
select v);
var myQuery = (from v in mainQuery
select new MainClass()
{
MainKey = v.Field1,
MainName = v.Field2,
MainList = new []
{
new SmallObject { SmallKey = v.Field3 },
new SmallObject { SmallKey = v.Field4 },
}
});
var result1 = myQuery.ToList();
//Changing datatypes for optimization reasons in SQLServer2000
var cmd = DataContext.GetCommand(myQuery);
foreach (System.Data.Common.DbParameter param in cmd.Parameters)
{
// nvarchar -> varchar
// decimal -> numeric
}
var result2 = DataContext.Translate<MainClass>(cmd.ExecuteReader()).ToList();
result1.MainList в порядке
result2.MainList равен null
Исходный запрос был очень медленным при работе с SQLServer2000, и я получил его при изменении типов данных (Linq используетnvarchar и decimal, поскольку в моей базе данных используются varchar и numeric)
Поэтому я хочу, чтобы result2 был таким же, как result1, но этого не происходит при выполнении DataContext.Translate следующим образом.
Есть мысли о том, чтобы получить такой же результат?
Я также пробовал анонимные типы, например:
IEnumerable<object> MainList {get;set;}
...
MainList = new []
{
new { SmallKey = v.Field3},
new { SmallKey = v.Field4},
}
, но результат тот же: