Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to return Wrapper obj of TableOjb1 and TableObj2 using linq

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

My question is how to return a list of MergeObj when joining the two tables. I tried:

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

But QueryJoin() gives Exception: System.NotSupportedException, Joins are not supported.

please note I'm using sqlite.net not ADO.net.

like image 577
macio.Jun Avatar asked Oct 16 '14 17:10

macio.Jun


1 Answers

Try doing the select after casting the join result to a list.

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

Edit : Since your database don't seems to support join, you can extract the result of your database in two distinct List and then join them using LINQ.

like image 67
Seb Avatar answered Sep 28 '22 01:09

Seb