我是Linq的初学者,我发现我的内连接查询比例如在代码中越过表更慢且效率更低。此外,这些在ListView中收费的数据要轻得多。
以下是代码:
public static IEnumerable<Alumno> GetItems()
{
return (from gal in me.Table<GrupoAlumno>()
join alu in me.Table<Alumno>()
on gal.IdAlumno equals alu.ID
select alu);
}
怎么可能?
谢谢。
答案 0 :(得分:1)
我不同意现有的接受答案!
Linq不只是对IEnumerable<T>
进行操作 - 它也可以在IQueryable<T>
上运行,当它出现时,Linq语句通常以SQL等查询语言执行。在这种情况下,Linq在性能上与直接在SQL中运行非常相似,但具有其他优点,如编译时间类型检查和智能感知。
我同意@Anders的说法,无论何时你遇到性能问题,然后测量正在发生的事情是一个很好的第一步 - 但我绝对不同意“linq可能不是要走的路” - 我会说相反 - “linq可能是要走的路”但是请确保你测量并理解发生了什么 - 就像使用SQL一样,你的linq查询很容易做一些你真正没想到的事情!
答案 1 :(得分:1)
我的问题解决了。有必要转换toList()
,现在数据加载到我的ListView工作正常。
public static IEnumerable<Alumno> GetItems()
{
return (from gal in me.Table<GrupoAlumno>()
join alu in me.Table<Alumno>()
on gal.IdAlumno equals alu.ID
select alu).ToList();
}
答案 2 :(得分:0)
Linq运算符适用于IEnumerable<T>
,因此它现在可以对正在排序的数据做出假设,也不会使用任何更好的方式来访问数据,而不仅仅是循环遍历数据。
当数据量增加时,通常可以使用其他结构编写更有效的代码,这些结构利用底层数据存储方式和其他有关数据的已知事实。
如果性能有问题(您是否对代码进行了分析以确认这确实是一个问题?),那么linq可能就不是了。我认为,当性能不如实现时间重要时,linq表达搜索和数据操作是非常好的。如果是相反的方式,linq可能对你来说太慢了。