C# 计数SQL查询未返回预期值

C# 计数SQL查询未返回预期值,c#,sql,sqlite,C#,Sql,Sqlite,我试图让一个方法返回count语句 public int getSettingsCount(string UserId, string Setting) { int LastSetting; //var user = new SqlDataLayer(); using (var db = new SQLite.SQLiteConnection(this.DBPath)) { {

我试图让一个方法返回count语句

    public int getSettingsCount(string UserId, string Setting)
    {
        int LastSetting;
        //var user = new SqlDataLayer();
        using (var db = new SQLite.SQLiteConnection(this.DBPath))
        {
            {
                List<int> _setting = db.Query<int>("SELECT COUNT(*) FROM QTabSettings WHERE UserId = 1058 AND Setting = 'ServerDropdown' GROUP BY UserId;");
                LastSetting = Convert.ToInt32(_setting.SingleOrDefault());
            }
            return LastSetting;
        }
    }
public int getSettingsCount(字符串用户ID,字符串设置)
{
最后设置;
//var user=new SqlDataLayer();
使用(var db=new SQLite.SQLiteConnection(this.DBPath))
{
{
列表_setting=db.Query(“从QTabSettings中选择COUNT(*),其中UserId=1058,setting='ServerDropdown'按UserId分组;”;
LastSetting=Convert.ToInt32(_setting.SingleOrDefault());
}
返回最新设置;
}
}
当我执行查询时,它返回正确的值(6)。但是,我从上面的查询中得到了值(0)


如何获得将计数返回为int的方法?

如果我正确理解您的问题,我认为这就是您想要的:

LastSetting = _setting.FirstOrDefault();
或:


您正在使用
LIMIT 1
,但仍在使用
List
,这很奇怪,也没有必要。另外,由于它是
count(*)
,因此不需要
LIMIT 1
,因为结果将是标量数据。应该改成

int _setting = db.Query<int>("SELECT COUNT(*) FROM QTabSettings WHERE UserId = 1058 AND Setting = 'ServerDropdown';");
LastSetting = _setting;
int设置=db.Query(“从qtrasettings中选择COUNT(*),其中UserId=1058,set='ServerDropdown';”;
LastSetting=\u设置;

这将返回1,因为列表中只有一个值。我需要访问该实际值。我不确定为什么要使用列表,但请尝试执行LastSetting=\u setting.FirstOrDefault();因为如果我不这样做,就会出现一个编译错误,说明无法将int隐式转换为列表。
\u setting.count()
将返回列表的count属性,而不是DB count值。是吗?@Rahul是的,这是正确的-我误解了这个问题。你希望
限制1
能实现什么?很好,我删除了它。你为什么
按时间戳排序
?此查询仍将返回一行。代码似乎是正确的,但我会尝试更改列表中的列表,并在所有地方进行适当的更改。只是想尝试一个疯狂的想法。加上在他的查询中,
groupby
也是不必要的,因为我们过滤一个唯一的用户。
int _setting = db.Query<int>("SELECT COUNT(*) FROM QTabSettings WHERE UserId = 1058 AND Setting = 'ServerDropdown';");
LastSetting = _setting;