在Linq上加入表效率

时间:2012-03-07 15:42:52

标签: linq xamarin.android

我是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);
}

怎么可能?

谢谢。

3 个答案:

答案 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可能对你来说太慢了。