所以我有一个sqlite数据库。 Foo与类型Bar的关系为1对1。 Bar与Baz类型有1对多的关系
我正在使用LinqToSql。
如果我使用查询来获取所有带有子对象的Baz对象:
IEnumerable<MeleeWeapon> returnValue;
using (var connection = GetDatabaseConnection())
using (var context = new DataContext(connection))
{
context.DeferredLoadingEnabled = false;
var options = new DataLoadOptions();
options.LoadWith<MeleeWeapon>(mw => mw.Attacks);
context.LoadOptions = options;
var query =
from
meleeWeapon in context.GetTable<MeleeWeapon>()
select
meleeWeapon;
returnValue = query.ToArray();
}
return returnValue;
我很成功。
如果我使用查询来获取所有具有此类条形码的foos:
IEnumerable<Item> returnValue;
using (var connection = GetDatabaseConnection())
using (var context = new DataContext(connection))
{
context.DeferredLoadingEnabled = false;
var options = new DataLoadOptions();
options.LoadWith<Item>(i => i.MeleeWeaponInformation);
context.LoadOptions = options;
var query =
from
item in context.GetTable<Item>()
where
item.MeleeWeaponInformation.Any()
select
item;
returnValue = query.ToArray();
}
return returnValue;
我很成功。
令人费解的是,如果我使用一个查询来获取包含条形的所有foos,所有的bat都属于这样的条形:
IEnumerable<Item> returnValue;
using (var connection = GetDatabaseConnection())
using (var context = new DataContext(connection))
{
context.DeferredLoadingEnabled = false;
var options = new DataLoadOptions();
options.LoadWith<Item>(i => i.MeleeWeaponInformation);
options.LoadWith((MeleeWeapon mw) => mw.Attacks);
context.LoadOptions = options;
var query =
from
item in context.GetTable<Item>()
where
item.MeleeWeaponInformation.Any()
select
item;
returnValue = query.ToArray();
}
return returnValue;
我在query.ToArray()
的行上遇到invalidCastException我猜的是,其中两个表有一个名为Id的列(Foo.Id和Baz.Id; Bar与foo为1对1,外键/主键为Bar.Foo) 我做错什么了吗?在LinqToSql中无法获得Parent.Child.Grandchild吗?这是SQLite的问题吗?