【发布时间】:2011-09-21 21:04:15
【问题描述】:
这个问题是这个问题的后续: How to create a list from two values
考虑这段代码:
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 和小数,因为我的数据库使用 varchar 和数字)
所以我希望 result2 与 result1 相同,但在执行这样的 DataContext.Translate 时不会发生这种情况。
有没有想过在这里得到相同的结果?
我也尝试过匿名类型,像这样:
IEnumerable<object> MainList {get;set;}
...
MainList = new []
{
new { SmallKey = v.Field3},
new { SmallKey = v.Field4},
}
但结果是一样的:
【问题讨论】:
标签: linq anonymous-types translate strong-typing