我正在使用CoolStorage作爲ORM並且有一個關於查詢數據庫頻率的問題。LINQ如何得到它的結果
我要返回一個團隊列表,並且還想顯示每個團隊中包含的用戶數。我通過致電Team.List()
返回團隊,並且我可以考慮如何返回用戶數量的2個選項。一種方法是向Team類中添加一個屬性,該類返回其[OneToMany] SysUsers的計數,另一個是對由Team.List()
返回的結果使用LINQ。下面的代碼演示了兩種方法,它們都返回相同的結果。
我想了解如何影響數據庫的交互,例如將它先回隊的名單,然後運行對每一個單獨的查詢來獲取用戶的數量?如果我然後想添加另外的2或3個字段,它會爲每個額外的字段運行另一個單獨的查詢嗎?這兩種方法有什麼區別?
我的問題是,如果連接不好,這可能會使簡單的查詢無法響應。
的選項CoolStorage存在運行即席SQL查詢,而不是,我是不是過得更好,而不是做這行更復雜的查詢?還是我擔心什麼都沒有?
CSList<Team> teams = Team.List();
// Counting number of objects
var d = from t in teams
select new
{
TeamID = t.TeamID,
TeamName = t.TeamName,
NoUsers = t.SysuserTeams.Count
};
// Using property added to Team class
var e = from t in teams
select new
{
TeamID = t.TeamID,
TeamName = t.TeamName,
NoUsers = t.NumberOfUsers
};
DataGridView dgv = this.dgvTeams;
dgv.DataSource = d.ToList();
// Same result as
dgv.DataSource = e.ToList();
大多數奧姆斯有'Log'財產,或看到正在執行什麼實際的數據庫查詢的一些其他手段。這是查看精確查詢對確切查詢提供者所做的工作的好工具。這對於查看執行查詢的時間,它們的數量以及查詢本身是以更多/更少的信息來查詢需要的還是以其他方式低效的方式很有用。 – Servy
謝謝,我發現了Log屬性,它爲每個返回的行激發一個單獨的select查詢。因此,我猜想我需要爲複雜查詢編寫SQL語句 – CrazyHorse
'我需要爲複雜查詢編寫SQL'不要進行泛化。某些複雜的查詢最終不會被某些ORM有效地映射。您可以嘗試調整在LINQ中如何編寫查詢以更改結果,並且還有可能不同類型的複雜查詢將更有效地映射。 – Servy