【问题标题】:Joins and anonymous types in SQLiteSQLite 中的连接和匿名类型
【发布时间】:2013-02-25 10:29:49
【问题描述】:

我正在尝试在 SQLite 中执行一些 LINQ 语句,但遇到了一些问题。

首先我正在尝试加入。这是我的代码:

var query = from client in db.Table<Client>()
    join address in db.Table<AddressDetail>()
    on client.AddressID equals address.AddressID
    select new
    {   
        ClientID = client.ClientID,
        AddressID = address.AddressID,
        Name = address.Name,
        LastSaveDate = client.LastSaveDate
    };

这失败了,我收到的错误消息是:不支持加入。

太棒了!!

所以为了解决这个问题,我将我的代码分成 2 个查询,所以这里是更新的代码:

var query = db.Table<Client>();

foreach (var client in query)
{
    var subQuery = from address in db.Table<AddressDetail>()
                   where address.AddressID == client.AddressID
                   select new
                   {
                       ClientID = client.ClientID,
                       AddressID = address.AddressID,
                       Name = address.Name,
                       LastSaveDate = client.LastSaveDate
                   };

    foreach (var fullClient in subQuery)
    {
         //Do something here
    }
}

这一切似乎都有效,直到我尝试循环子查询的结果。 我收到以下错误:没有为此对象定义无参数构造函数。

这是否意味着我不能在 SQLite 中使用连接和匿名类型?

任何想法我可以解决这个问题。

我正在使用 SQLite、.Net 4.5 并正在创建一个 Windows 8 商店应用程序。

【问题讨论】:

    标签: sqlite windows-8 .net-4.5


    【解决方案1】:

    你试过这个吗? 只需将ToList() 添加到您要加入的表即可。

    var query = from client in db.Table<Client>()
    join address in db.Table<AddressDetail>().ToList()
    on client.AddressID equals address.AddressID
    select new
    {   
        ClientID = client.ClientID,
        AddressID = address.AddressID,
        Name = address.Name,
        LastSaveDate = client.LastSaveDate
    };
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2011-09-03
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2017-06-19
    • 2011-11-07
    • 2011-02-06
    相关资源
    最近更新 更多