C# 将LINQ与join和new对象选择子句一起使用会导致异常

C# 将LINQ与join和new对象选择子句一起使用会导致异常,c#,.net,linq,sqlite,exception-handling,C#,.net,Linq,Sqlite,Exception Handling,我正在使用一个带有表ActivityId、名称、表CraftId、名称的SQLite数据库,以及一个链接两个ActivityCraftId、activity\u ref、Craftf\u ref的表 所使用的上下文: public DbSet<Activity> Activities { get; set; } public DbSet<Craft> Crafts { get; set; } public DbSet<ActivityCraft> Activi

我正在使用一个带有表ActivityId、名称、表CraftId、名称的SQLite数据库,以及一个链接两个ActivityCraftId、activity\u ref、Craftf\u ref的表

所使用的上下文:

public DbSet<Activity> Activities { get; set; }
public DbSet<Craft> Crafts { get; set; }
public DbSet<ActivityCraft> ActivityCrafts { get; set; }
但是需要的是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
            };
似乎在执行查询时,只要更改selection子句就会导致异常

调用的目标已引发异常


我在回答,但这要归功于abatishchev和casperOne

该问题是由于将布尔值用作成对列的类型所致。SQLite没有本机布尔类型,它使用INT-这甚至在构造匿名类型时都会导致问题

我通过将Db类型更改为INTEGER并根据需要更改值来解决这个问题

我确实尝试在数据库中保留布尔值,并使用与等效的c类型相同的long。这不起作用,我不知道为什么,但它仍然会给出构造错误,就好像它试图从“true”/“false”字符串创建long类型一样。
注意:SQLite文档说明布尔值在内部存储为带值的整数或0或1

异常通常意味着该类型的静态构造函数中存在错误。异常的InnerException属性说明了什么?这可能会给你解决问题的钥匙。
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
            };