1

テーブルActivity(Id、Name)、テーブルCraft(Id、Name)、および2つのActivityCraft(Id、activity_ref、craft_ref、Paired)をリンクするテーブルを持つSQLiteデータベースを使用しています。

使用されるコンテキスト:

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

ActivityCraftのすべてのActivityエントリの特定のCraftの「Paired」値を見つけようとしています。

次のクエリは、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
            };

選択句を変更するだけで、クエリの実行時に例外が発生するようです。

呼び出しのターゲットによって例外がスローされました

4

1 に答える 1

0

私は答えていますが、ベビーベッドの abatishchev と casperOne の両方に感謝します。

この問題は、Paired 列のタイプとして BOOLEAN を使用しているためです。SQLite にはネイティブの BOOLEAN 型がなく、INT が使用されます。これは、匿名型を構築するときにも問題を引き起こします。

Db 型を INTEGER に変更し、値を適切に変更することで問題を解決しました。

BOOLEAN を Db に保持し、同等の c# 型として long を使用しようとしました。これは機能しませんでした。理由は定かではありませんが、「true」/「false」文字列から long 型を作成しようとしているかのように、まだ構築エラーが発生していました。
注: SQLite のドキュメントによると、BOOLEAN は値または 0 または 1 の INTEGER として内部的に格納されます。

于 2013-01-12T10:43:35.543 に答える