【发布时间】:2014-10-20 02:37:25
【问题描述】:
我有这个 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
吴宇森的代码可以编译,但是我的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”代码),但我不知道哪一种更可取。它们都比饥饿的蜂鸟飞向新发现的花蜜要快。
【问题讨论】:
-
你使用的是来自
Dapper的.Query<T>吗? -
不;没听说过他。
-
请参阅更新 2。
-
如果您要查询
int,为什么要查询PhotraxBaseData的类型参数,不应该只是db.Query<int>(sql).Single(); -
来自他们的documentation,您可以使用此代码
latCount = db.ExecuteScalar<int>(sql);,因为它将返回除列表之外的行。我不知道您为什么会收到该错误,但它会在 SQLFiddle 上运行。
标签: c# sqlite windows-store-apps linqpad sqlite-net