【发布时间】:2019-08-21 10:11:21
【问题描述】:
我使用实体框架在 C# 中创建了一个简单的登录表单。我在调用query.SingleOrDefault的if语句中不断收到此错误@
错误 CS1061“IQueryable”不包含“SingleOrDefault”的定义,并且找不到接受“IQueryable”类型的第一个参数的可访问扩展方法“SingleOrDefault”(您是否缺少 using 指令或程序集引用?)
我对此比较陌生,我该如何解决这个错误?
using DevExpress.XtraEditors;
using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Data.Entity;
namespace myHome
{
public partial class frmLogin : DevExpress.XtraEditors.XtraForm
{
public frmLogin()
{
InitializeComponent();
}
private void labelControl3_Click(object sender, EventArgs e)
{
}
private void linkSite_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://www.pishdad.org");
}
private void btnInput_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtUser.Text))
{
XtraMessageBox.Show("نام کاربری وارد نشده است", "پیام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtUser.Focus();
return;
}
else if (string.IsNullOrEmpty(txtPass.Text))
{
XtraMessageBox.Show("رمز کاربری وارد نشده است", "پیام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtPass.Focus();
return;
}
try
{
IQueryable query = null;
using (myHomeEntities db = new myHomeEntities())
{
query = from u in db.TB_User
where u.UserName == txtUser.Text && u.PassWord == txtPass.Text
select u;
}
if (query.SingleOrDefault() != null) // This line is the issue.
{
XtraMessageBox.Show("شما دسترسی پیدا کردید! ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
XtraMessageBox.Show("ورود نا معتبر! ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw;
}
}
private void BtnExit_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
【问题讨论】:
-
首先将您的查询转换为列表:"
query.ToList().SingleOrDefault()",然后重试。 -
您的问题是您已将
query明确声明为IQueryable类型。改为将其声明为IQueryable<YourUserType>。 -
看起来您将纯文本密码存储在数据库中。甚至不要考虑以纯文本形式存储密码。始终存储散列和加盐密码。如果你真的想要一个好的登录机制并且想要使用 Entity Framework,看看 Identity。
-
@AmirHN 我已经包含了对 Afshin 解决方案的解释以及替代方案。
标签: c# sql entity-framework linq