我正在使用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")
也可以,但我错过了该值。
任何想法?
答案 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
这是我想要的值。