2015-10-18 73 views
-2

我有這樣的Linq查詢(美孚有日期時間變量):C#的LINQ子查詢中的foreach

var tableFoo = context.GetTable<Foo>(); 
var tableBar = context.GetTable<Bar>(); 

var preselect = tableFoo.Where(o => o.Name == ""); 

List<Foo> foos = new List<Foo>(); 

foreach (Foo f in preselect) //System.InvalidCastException comes here at the second iteration (Unable to cast to DateTime) 
{ 
    Foo foo = f; 

    var subselect = tableBar.Where(o => o.Id == foo.Id); 
    foreach (Bar bar in subselect) 
    { 
     foo.bars.Add(bar); 
    } 
    foos.Add(foo); 
} 

它正常工作時preselect包含1個對象。
但是,如果preselect包含多個對象,它將無法按預期工作。在第一次迭代中它可以工作,但在第二次中,我得到System.InvalidCastException
它與內部subselect有關,因爲如果我刪除內部foreach,它完美的工作。
我認爲它與this有關。但我無法弄清楚要改變什麼。

preselect子選擇不適合我的應用程序體系結構

回答

0

我解決它像這樣(我知道這是不是很優雅):

var tableFoo = context.GetTable<Foo>(); 
var tableBar = context.GetTable<Bar>(); 

var preselect = tableFoo.Where(o => o.Name == ""); 

List<Foo> foos = new List<Foo>(); 

foreach (Foo f in preselect) //System.InvalidCastException comes here at the second iteration (Unable to cast to DateTime) 
{ 
    Foo foo = f; 

    foos.Add(foo); 
} 

foreach (Foo foo in foos) 
{ 
    var subselect = tableBar.Where(o => o.Id == foo.Id); 
    foreach (Bar bar in subselect) 
    { 
     foo.bars.Add(bar); 
    } 
}