C#Linq Subquery in foreach

时间:2015-10-18 18:00:15

标签: c# linq sqlite

我有这个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中的子选择不适合我的应用程序架构

1 个答案:

答案 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);
    }
}