2017-01-20 70 views
1

這可能是我還在想Linq2Sql模式,但我很難將其轉換爲OrmLite。ServiceStack OrmLite - 是否有可能通過並參考非分組字段的列表進行分組?

我有一個顧客表和一張會員卡表。

我想獲得一份客戶名單,併爲每位客戶提供一張特快列表。

我的策略是選擇客戶,加入到忠誠卡,按整個客戶表分組,然後將這些卡映射到客戶列表中的單個屬性。

事情沒有按慣例命名,所以我不認爲我可以利用隱式聯接。

在此先感謝您的幫助。

下面是代碼我現在不工作:

query = query.Join<Customer, LoyaltyCard>((c, lc) => c.CustomerId == lc.CustomerId) 
    .GroupBy(x => x).Select((c) => new { c, Cards = ?? What goes here? }); 

編輯:我想,也許這個方法:

var q = db.From<Customer>().Take(1); 
q = q.Join<Customer, LoyaltyCard>().Select(); 
var customer = db.SelectMulti<Customer,LoyaltyCard>(q); 

但是,這是給我的參數「鍵的ArgumentNullException 「。

回答

2

這不是從你以後在做什麼說明或您的示例代碼清晰,但可以解決您的SelectMulti Query有:

var q = db.From<Customer>() 
    .Join<Customer, LoyaltyCard>(); 

var results = db.SelectMulti<Customer,LoyaltyCard>(q); 
foreach (var tuple in results) 
{ 
    Customer customer = tuple.Item1; 
    LoyaltyCard custCard = tuple.Item2; 
} 
+0

我在找填充我的客戶對象與忠誠卡的列表。聯合工作正常,但我只需要每個客戶一個記錄。我試圖弄清楚如何將第二個表格中的字段以列表的形式引用給我分組的每個客戶。我在看Sql.Flatten,但我不知道如何引用GroupBy方法後面的非分組字段。如果這仍然沒有意義,我會用更多的視覺效果來編輯問題。 – IronicMuffin

+0

@IronicMuffin你需要通過[參考約定和LoadSelect](https://github.com/ServiceStack/ServiceStack.OrmLite#reference-conventions)來完成。 Typed'SqlExpression'封裝了一個SQL查詢及其表格結果集,它不合並結果。上面的'SelectMulti'示例返回所需的數據,但您需要手動將結果合併到所需的形狀中。或者,您可以使用[合併()擴展方法](https://github.com/ServiceStack/ServiceStack.OrmLite#merge-disconnected-poco-result-sets)來合併2個獨立查詢的結果。 – mythz

+1

我能夠使用參考約定和LoadSelect實現此目的。我仍舊陷入舊思維。感謝您的指導。 – IronicMuffin

相關問題