我用实体框架在C#中创建了一个简单的登录表单。我一直在调用query.SingleOrDefault
的if语句中得到这个错误
Error CS1061 'IQueryable‘不包含'SingleOrDefault’的定义,也找不到接受'IQueryable‘类型的第一个参数的可访问扩展方法'SingleOrDefault’(您是缺少使用指令还是程序集引用?)
我对此还比较陌生,如何修复这个错误呢?
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();
}
}
}
发布于 2019-08-21 02:19:56
使用此方法:
try
{
IQueryable<TB_User> query = null;
...
if (query.ToList().SingleOrDefault() != null)
{
...
}
}
发布于 2019-08-21 19:28:08
被接受的答案并没有很好地解释这一变化,所以我认为这是值得的。
Amir,您尝试将非泛型IQueryable
作为参数传递给需要IEnumerable<T>
的SingleOrDefault()
。
Afshin通过将IQueryable
更改为IQueryable<T>
来解决错误,然后通过ToList()
将其转换为IEnumerable<T>
。
您还可以使用Queryable.Cast()
获得所需的结果:
query.Cast<T>().ToList().SingleOrDefault(); // T being your desired Type
https://stackoverflow.com/questions/57589291
复制相似问题