2017-05-03 57 views
0

我正在使用Simple.Data來嘗試從我們的數據庫構建查詢。基本上,結果需要包含來自Users表的某些列,以及來自Addresses表的多行,以及來自實體表的一個特定列。如何在同一個Simple.Data查詢中使用With和LeftJoin?

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聲明我的查詢中能正常工作(雖然我會錯過的地址),但與它,我最終得到「給定的鍵不存在在字典中「。

另外應該注意的是,包括WithDatabase.Entities.Name.As("ParentEntityName")不包括Database.Entities.Name.As("ParentEntityName")的作品,但我錯過了這個價值。

任何想法?

回答

0

原來LeftJoin和With在你在Select語句中指定你想要的東西時不一起玩。我最終使用帶有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); 

然後當我把結果列表,我從「實體」的SimpleQuery值作爲SimpleRecord,其中載name這是我想要的價值。

相關問題