我编写了以下函数来查询我的 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/