c# - 多次执行 .ToList() 是个坏主意吗?

标签 c# linq sqlite xamarin

我编写了以下函数来查询我的 Xamarin 表单应用程序中的 SQLite 数据库。但是,由于我必须调用 .ToList() 两次,所以我对此不是很有信心。这是糟糕的代码吗?任何反馈将不胜感激。

public static List<string> GetAllLocationIds()
    {
        try
        {
            lock (CollisionLock)
            {
               //TableQuery<TResult> First .ToList() result
               //List<string> Second .ToList() result
                return Database.Table<Location>().ToList().Select(loc=>loc.LocationId).ToList();
            }
        }
        catch (Exception ex)
        {
            Insights.Report(ex);
            return null;
        }
    }

直接在 Database.Table<Location>() 上执行 .Select导致以下异常。`

System.MissingMethodException: Default constructor not found for type 
System.String at System.RuntimeType.CreateInstanceMono`

最佳答案

是的。

开启

Database.Table<Location>().ToList()

您正在具体化所有表 Location .那么你只选择了LocationId在内存中。

改为使用:

Database.Table<Location>().Select(loc=>loc.LocationId).ToList();

直接在 IQueryable<Location> 上工作并且只实现 LocationId .假设 Table<Location>IQueryable<Location> .

关于c# - 多次执行 .ToList() 是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350374/

相关文章:

c# - Task.Run 和 Task.Factory.StartNew 有什么区别

c# - xdoc 查询的 Select 语句

android - 使用 greenDao 动态查询

c# - Web API 核心 : "FOREIGN KEY constraint failed" error during POST request SQLite

QT sqlite 如何知道何时没有更多结果?

c# - Windows 8.1 统一项目中的 Automapper 启动异常

c# - 为什么我的动态 IEqualityComparer 不起作用?

c# - OnPaint 不更新

linq - Entity Framework 和 LINQ - 算术运算导致溢出

C# 错误 CS1061 : Type `System.Collections.Generic.List<int>' does not contain a definition for `Length'