使用带有连接的LINQ和新的对象选择子句会导致异常

时间:2013-01-12 00:54:49

标签: c# .net linq sqlite exception-handling

我正在使用一个带有表Activity(Id,Name)的SQLite数据库,一个表Craft(Id,Name)和一个链接两个ActivityCraft的表(Id,activity_ref,craft_ref,Paired)。

使用的上下文:

public DbSet<Activity> Activities { get; set; }
public DbSet<Craft> Crafts { get; set; }
public DbSet<ActivityCraft> ActivityCrafts { get; set; }

我正在尝试为ActivityCraft中的所有活动条目找到特定工艺的“配对”值。

以下查询返回ActivityCraft表中提到的特定Craft的活动列表

var query2 = from a in context.Activities
             join ac in context.ActivityCrafts on a.Id equals ac.activity_ref
             where ac.craft_ref == SelectedCraftId
             select a;

然而,需要的是Activity.Name和ActivityCraft.Paired,所以我尝试了以下失败的

var query = from a in context.Activities
            join ac in context.ActivityCrafts on a.Id equals ac.activity_ref
            where ac.craft_ref == SelectedCraftId
            select new
            {
                xN = a.Name,
                xP = ac.Paired
            };

看来只需更改选择子句就会在查询执行时导致异常。

  

调用目标抛出了异常

1 个答案:

答案 0 :(得分:0)

我正在回答,但是对于婴儿床来说,abatishchev和casperOne都很有用。

问题是由于使用BOOLEAN作为配对列的类型。 SQLite没有本机BOOLEAN类型,它使用INT - 这甚至在构造匿名类型时也会出现问题。

我通过将Db类型更改为INTEGER并将值更改为适合来解决问题。

我确实尝试将BOLE保留在Db中,并使用long作为等效的c#类型。这不起作用,我不确定为什么,但它仍然给出构造错误,好像它试图从'true'/'false'字符串创建long类型。
注意:SQLite文档说BOOLEAN内部存储为INTEGER,值为0或1