我正在使用simple.data尝试从我们的数据库构建查询。基本上,结果需要包括来自用户表的某些列以及来自地址表的多个行,以及一个来自实体表的特定列。
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
语句,这很好(尽管我会缺少地址(,但是有了它,我最终会得到"给定键在字典中不存在"。
还应注意,包括With
并排除Database.Entities.Name.As("ParentEntityName")
也有效,但我缺少该值。
有什么想法?
结果是左上角,当您在Select语句中指定想要的内容时,请不要一起播放。我最终使用withone语句和左join从桌子上获取整个行,然后从那里获得了整个行 - 不是最优雅的修复程序,但它可以正常工作。
。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);
然后,当我将结果转换为列表时,我从简单Query中的"实体"中获得了一个简单记录,其中包含name
,这是我想要的值。