1

我正在使用一个 SQLite 数据库,其中有一个表 Activity(Id, Name)、一个表 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 表中提到的特定工艺的活动列表

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
            };

似乎在查询执行时简单地更改选择子句会导致异常。

调用的目标已抛出异常

4

1 回答 1

0

我正在回答,但感谢 abatishchev 和 casperOne 的婴儿床。

问题是由于使用 BOOLEAN 作为 Paired 列的类型。SQLite 没有本机 BOOLEAN 类型,它使用 INT - 这在构建匿名类型时也会导致问题。

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

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

于 2013-01-12T10:43:35.543 回答