我有这个Linq查询(Foo有一个DateTime变量):
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 :(得分: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);
}
}