首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >IQueryable不包含SingleOrDefault的定义

IQueryable不包含SingleOrDefault的定义
EN

Stack Overflow用户
提问于 2019-08-21 02:11:21
回答 2查看 3K关注 0票数 1

我用实体框架在C#中创建了一个简单的登录表单。我一直在调用query.SingleOrDefault的if语句中得到这个错误

Error CS1061 'IQueryable‘不包含'SingleOrDefault’的定义,也找不到接受'IQueryable‘类型的第一个参数的可访问扩展方法'SingleOrDefault’(您是缺少使用指令还是程序集引用?)

我对此还比较陌生,如何修复这个错误呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-21 02:19:56

使用此方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try
{
   IQueryable<TB_User> query = null;
   ...


  if (query.ToList().SingleOrDefault() != null)
  {
     ...
  }

}
票数 2
EN

Stack Overflow用户

发布于 2019-08-21 19:28:08

被接受的答案并没有很好地解释这一变化,所以我认为这是值得的。

Amir,您尝试将非泛型IQueryable作为参数传递给需要IEnumerable<T>SingleOrDefault()

Afshin通过将IQueryable更改为IQueryable<T>来解决错误,然后通过ToList()将其转换为IEnumerable<T>

您还可以使用Queryable.Cast()获得所需的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query.Cast<T>().ToList().SingleOrDefault(); // T being your desired Type
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57589291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文