7
class TableObj1 {
    public string Id {get; set;}
    public string Name {get; set;}
}

class TableObj2 {
    public string Id {get; set;}
    public string Email {get; set;}
}

class MergeObj {
    public TableObj1 Obj1 {get; set;}
    public TableObj2 Obj2 {get; set;}
}

私の質問は、2 つのテーブルを結合するときに MergeObj のリストを返す方法です。私は試した:

public IEnumerable<MergeObj> QueryJoin() {
    return (
        from obj1 in conn.Table<TableObj1>()
        join obj2 in conn.Table<TableObj2>()
        on obj1.Id
        equals obj2.Id
        select new MergeObj{Obj1 = obj1, Obj2 = obj2}
    );
}

void main() {
    IEnumerable<MergeObj> mergeObjs = QueryJoin();
}

しかし QueryJoin() は例外を与えます: System.NotSupportedException、結合はサポートされていません。

ADO.netではなくsqlite.netを使用していることに注意してください。

4

2 に答える 2

3

結合結果をリストにキャストした後、選択を実行してみてください。

public IEnumerable<MergeObj> QueryJoin()
    {
        List<TableObj1> t1 = conn.Table<TableObj1>().ToList();
        List<TableObj2> t2 = conn.Table<TableObj2>().ToList();

        return t1.Join(t2, outer => outer.Id, 
                           inner => inner.Id, 
                           (outer, inner) => new MergeObj { Obj1 = outer, Obj2 = inner });
    }

編集:データベースは結合をサポートしていないようであるため、データベースの結果を2つの異なるリストに抽出し、LINQを使用してそれらを結合できます。

于 2014-10-20T15:56:58.077 に答える
1

匿名型に射影し、Linq-to-Objects を使用してオブジェクトを作成する必要がある場合があります。

public IEnumerable<MergeObj> QueryJoin() {
    return (
        from obj1 in conn.Table<TableObj1>()
        join obj2 in conn.Table<TableObj2>()
        on obj1.Id
        equals obj2.Id
        select new {obj1, obj2}
    ).AsEnumerable()
     .Select(o => new MergeObj{Obj1 = o.obj1, Obj2 = o.obj2}) ;
}
于 2014-10-20T18:58:02.537 に答える