我使用Entity Framework在C#中创建了一个简单的登录表单。我在if语句中调用query.SingleOrDefault
错误CS1061'IQueryable'不包含'SingleOrDefault'的定义,并且找不到可以接受的扩展方法'SingleOrDefault'接受类型为'IQueryable'的第一个参数(您是否缺少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();
}
}
}
答案 0 :(得分:0)
使用此:
try
{
IQueryable<TB_User> query = null;
...
if (query.ToList().SingleOrDefault() != null)
{
...
}
}
答案 1 :(得分:0)
被接受的答案不能很好地解释这一变化,所以我认为这篇文章值得。
阿米尔,您尝试将非通用的IQueryable
作为参数传递给SingleOrDefault()
,而该参数需要IEnumerable<T>
。
Afshin通过将IQueryable
更改为IQueryable<T>
,然后通过ToList()
将其转换为IEnumerable<T>
,解决了您的错误。
您还可以使用Queryable.Cast<T>()
来获得所需的结果:
query.Cast<T>().ToList().SingleOrDefault(); // T being your desired Type