这个问题是这个问题的后续: 如何从两个值创建列表
考虑这段代码:
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 为空
原始查询在 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},
}
但结果是一样的: