我有这个 SQLite 方法:
internal static bool DataContainsAnyLocationInfo()
{
int latCount = 0;
using (var db = new SQLite.SQLiteConnection(App.DBPath))
{
string sql = "SELECT COUNT(Id) FROM PhotraxBaseData WHERE latitude > 0.0";
latCount = db.Query<PhotraxBaseData>(sql);
}
return (latCount > 0);
}
...由于以下原因无法编译:“无法将类型'System.Collections.Generic.List'隐式转换为'int' ”
我只想要一个 int 返回,例如 0 或 1 或 42,而不是整个 List。
我确实安装了 sqlite-net,如果有办法做到这一点会更容易,不排除 LINQy 方式,如果这可行的话。
更新
也许我最好这样做:
internal static bool DataContainsAnyLocationInfo(List<PhotraxBaseData> _pbd)
{
bool locInfoFound = false;
foreach (PhotraxBaseData pbd in _pbd)
{
if (pbd.latitude > 0.0)
{
locInfoFound = true;
break;
}
}
return locInfoFound;
}
更新 2
John Woo 的代码可以编译,但我的 SQL 肯定是错误的,因为虽然我在 PhotraxBaseData 中有很多纬度大于 0 的记录,但该函数返回 false。
当我直接在 LINQPad4 中运行这些查询时:
SELECT COUNT(Id) FROM PhotraxBaseData WHERE latitude > 0.0
SELECT COUNT(Id) FROM PhotraxBaseData WHERE (latitude > 0.0)
我得到:
) or end of expression expected
; expected
注意: 纬度是双倍的。
更新 3
所以现在我有两种工作方式(我上面的非数据库接触代码和 John Woo 的“ExecuteScalar”代码),但我不知道哪一种更可取。它们都比饥饿的蜂鸟飞向新发现的花蜜要快。