我正在使用一个带有表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
};
看来只需更改选择子句就会在查询执行时导致异常。
调用目标抛出了异常
答案 0 :(得分:0)
我正在回答,但是对于婴儿床来说,abatishchev和casperOne都很有用。
问题是由于使用BOOLEAN作为配对列的类型。 SQLite没有本机BOOLEAN类型,它使用INT - 这甚至在构造匿名类型时也会出现问题。
我通过将Db类型更改为INTEGER并将值更改为适合来解决问题。
我确实尝试将BOLE保留在Db中,并使用long作为等效的c#类型。这不起作用,我不确定为什么,但它仍然给出构造错误,好像它试图从'true'/'false'字符串创建long类型。
注意:SQLite文档说BOOLEAN内部存储为INTEGER,值为0或1