我有这个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);
}
...由于以下原因而无法编译:&#34; 无法隐式转换类型&#39; System.Collections.Generic.List&#39;到&#39; int&#39; &#34;
我只想要一个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;
}
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
注意: 纬度是双倍的。
所以现在我有两种工作方式(我上面的非数据库触摸代码,以及John Woo&#34; ExecuteScalar&#34;代码),但我不知道知道哪一个更好。它们都比一只饥肠辘辘的蜂鸟更快地掠过新发现的花蜜。
答案 0 :(得分:3)
来自documentation,您可以使用以下代码:
latCount = db.ExecuteScalar<int>(sql);
因为它将返回列表以外的行。我不知道你为什么会收到这个错误,但你的查询将在SQLFiddle上运行。