我正在使用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