這個問題是一個跟進這個問題: How to create a list from two values問題得到相同的結果,從DataContext.Translate
考慮以下代碼:
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和數字)
所以我想結果2是相同的result1,但是在做這樣的DataContext.Translate時不會發生這種情況。
在這裏得到相同結果的任何想法?
我也tryed匿名類型,像這樣:
IEnumerable<object> MainList {get;set;}
...
MainList = new []
{
new { SmallKey = v.Field3},
new { SmallKey = v.Field4},
}
,但結果是一樣的:
的差別是數據類型。出於某種原因,nvarchar和decimal在基於SQL2000的數據類型爲varchar和numeric的數據庫上運行得並不順利。我搜索不同的論壇,並發現其他類似的問題。 – hightow