【问题标题】:Getting error in LINQ query to sqlite在 LINQ 查询到 sqlite 时出错
【发布时间】:2017-12-07 12:14:26
【问题描述】:

我正在尝试在 sqlite 中进行登录查询,但无法将 AsyncTableQuery 转换为 boolean

public bool queryLogIn(string userNameLogIn,string passwordLogIn)
{
    var query=database.Table<Users>().Where(i => i.UserName == userNameLogIn && i.Password == passwordLogIn);

    if (query == true)//There is error
    {
        return true;
    }
    else
    {
        return false;
    }                
}

【问题讨论】:

  • 嗨。如果您认为某个答案解决了问题,请通过单击答案旁边的灰色复选标记将其标记为“已接受”。检查此链接以了解接受答案的工作原理:meta.stackexchange.com/questions/5234/…

标签: c# linq sqlite xamarin


【解决方案1】:

您可以使用FirstOrDefault函数登录成功。

public bool queryLogIn(string userNameLogIn,string passwordLogIn)
{
var query=database.Table<Users>().FirstOrDefault(i => i.UserName == userNameLogIn && i.Password == passwordLogIn);

if (query == null)//There is error
{
    return false;
}
else
{
    return true;
}                
}

【讨论】:

  • FirstOrDefault 没有参数
【解决方案2】:

Where 返回 iqueryableUsers。您需要 Any 而不是 确定序列的任何元素是否满足条件,并且由于它的返回类型是 bool,您可以在 if 语句中使用它:

var query=database.Table<Users>().Any(i => i.UserName == userNameLogIn
                                           && i.Password == passwordLogIn);

编辑:或者在您的if 中使用Any

var query=database.Table<Users>().Where(i => i.UserName == userNameLogIn 
                                             && i.Password == passwordLogIn);
if (query.Any())
{
    return true;
}

【讨论】:

  • 如何查询?
  • 很抱歉没有 .Any()。我可以做 query.CountAsyn() 、 .toListAsync() 、 .take() 、 .skip() 、.equals() ... 但不能做 .Any()。不过非常感谢
  • @KosovoDev .toListAsync().Any() 呢?
  • @KosovoDev 你确定你已经将using System.Linq; 添加到你的 using 指令中了吗?
  • 是但没有 Any() 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多