如何在同一个Simple.Data查询中使用With和LeftJoin?

时间:2017-05-03 16:26:04

标签: c# simple.data

我正在使用Simple.Data尝试从我们的数据库构建查询。基本上,结果需要包括Users表中的某些列,以及Addresses表中的多个行,以及实体表中的一个特定列。

Database.Users.FindAll(query)
              .With(Database.Users.Addresses.As("Address"))
              .LeftJoin(Database.Entities).On(Database.Users.ParentEntityId == Database.Entities.EntityID)
              .Select(Database.Users.UserID,
                     Database.Users.FirstName,
                     Database.Users.LastName,
                     Database.Entities.Name.As("ParentEntityName"));

奇怪的是,如果我在查询中没有With语句,这样可以正常工作(虽然我会错过地址),但有了它我最终会得到" The给定的密​​钥没有出现在字典中#34;。

另请注意,包括With和排除Database.Entities.Name.As("ParentEntityName")也可以,但我错过了该值。

任何想法?

1 个答案:

答案 0 :(得分:0)

当你在Select语句中指定你想要的东西时,结果是LeftJoin并且不能一起玩。我最后使用带有LeftJoin的WithOne语句来解决这个问题,从表中获取整行,然后从那里获得值 - 不是最优雅的修复,但它可以工作。

dynamic entity;
Database.Users.FindAll(query)
              .With(Database.Users.Addresses.As("Address"))
              .LeftJoin(Entities.As("Entity"), out entity).On(Users.ParentEntityId == entity.EntityID)
              .WithOne(entity)
              .Select(Database.Users.UserID,
                      Database.Users.FirstName,
                      Database.Users.LastName);

然后,当我将结果转换为列表时,我从" Entity"获得了值。在SimpleQuery中作为SimpleRecord,其中包含name这是我想要的值。