如何使用linq返回TableOjb1和TableObj2的Wrapper obj

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

我的问题是如何在加入两个表时返回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,不支持连接。

请注意我正在使用sqlite.net而不是ADO.net。


将连接结果转换为列表后,尝试执行select操作。

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

编辑:由于您的数据库似乎不支持连接,因此可以将数据库的结果提取到两个不同的列表中,然后使用LINQ将它们连接起来。


您可能需要投影到匿名类型,然后使用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}) ;
}
链接地址: http://www.djcxy.com/p/82075.html

上一篇: How to return Wrapper obj of TableOjb1 and TableObj2 using linq

下一篇: c++