我正在爲報告模型(SQL Server Reporting Services)創建數據源。 這些報告需要大量的連接和計算(比方說,計算像這樣花費的金錢參數,即數量A和數量B)......所有這些涉及子對象。在Linq/Lambda中寫入存儲過程(單元可測試但存儲過程存儲過程)。可能?
對於我來說,爲這段代碼編寫單元測試(即遍歷訂單集合,根據業務規則和子對象聚合信息等)是很有意義的。 要做到這一點,我希望我的代碼看起來約。像這樣
foreach (IOrder in Orders)
foreach (IOrderLine in IOrder.Orderlines)
...
return ...
然後測試返回值。
但是這段代碼並不是在報表視圖中使用的SQL ......當然...... 所以我在想,我可以在數據庫中插入一個.NET程序集。 這裏的問題當然是性能......我不想在C#中循環所有這些對象......太慢了。
因此,自然,Linq/Lambda/Expression樹似乎是我的答案。 正如我們所知道的那樣,當您將Linq轉換爲SQL時,會構建表達式樹,然後根據它們生成適當的SQL。因此,我可以使用lambda表達式在Linq中將我的代碼寫入到對象中,並在樣本集合(將表達式編譯爲.net)上單元測試此代碼,並在DB存儲過程中重複使用與Linq to SQL相同的代碼,所以在SQL Server內部它會爲我生成適當的SQL(就像Linq to SQL已經做到的那樣)...
然後,我可以從C#和高性能存儲中獲得單元測試和編寫域邏輯代碼的好處報告程序。
可能嗎? 我可以在SQL Server CLR存儲過程中使用Linq/Lambda嗎?任何人做過或知道如何使它工作? 我瘋了嗎?你知道更好的方法嗎?
感謝
附:我想現在我想出了這應該如何正確完成。據Udi Dahan說,如果我理解他是對的。數據庫應該是非規範化的,並且所有計算的字段應該位於表格中的對象上。 當子對象發生某些事情時(OrderLine添加),我的Customer對象應該接收一個事件並重新計算智能值(緩存並保存)。
然後報告直行向前,沒有邏輯和工作速度快...