この質問は、この質問のフォローアップです: 2 つの値からリストを作成する方法
次のコードを検討してください。
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 での実行が非常に遅く、データ型を変更すると修正されました (私のデータベースは varchar と numeric を使用するため、Linq は nvarchar と decimal を使用します)。
したがって、result2 を result1 と同じにしたいのですが、このように DataContext.Translate を実行すると、それは起こりません。
ここで同じ結果が得られるという考えはありますか?
次のように、匿名型も試しました。
IEnumerable<object> MainList {get;set;}
...
MainList = new []
{
new { SmallKey = v.Field3},
new { SmallKey = v.Field4},
}
しかし、結果は同じです: