Linq To SQL:包括Child的Child Collection

时间:2015-10-11 21:18:57

标签: c# linq sqlite linq-to-sql

所以我有一个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的问题吗?

0 个答案:

没有答案