不能隐式地将IEnumerable类型转换为带有实体的IQueryable类型

本文关键字:实体 类型 IQueryable 类型转换 IEnumerable 不能 | 更新日期: 2023-09-27 18:09:13

我对实体完全陌生(我已经接管了另一个人的项目),因此我很错过了一些关键事实,但我会尝试解释我的问题:

我有一些申请人,他们有一张表,上面有他们的名字等信息。我还有一张ASP的表。网用户。表通过user_id链接。

我试图使登录名在下拉列表中一个可选择的列表项,但为了这样做,我需要连接两个表。我写了下面的代码:

var container = new ModelContainer();
var manager = new ApplicantDBManager();
IEnumerable<Business.Entities.EF.Applicant> applicantQuery;
if (txtSearch.Text.Equals(string.Empty))
{
    applicantQuery = container.Applicants;
}
else
{
    var ids = manager.ApplicantSearchForIDs(ddlSearch.SelectedValue, txtSearch.Text, chkIncludeInactive.Checked);
    applicantQuery = (from a in container.Applicants
                      join u in container.Users on a.user_id equals u.user_id
                      where ids.Contains(a.user_id)
                      select new
                      {
                          user_id = a.user_id,
                          first_name = a.first_name,
                          last_name = a.last_name,
                          login_name = u.login_name,
                          date_of_birth = a.date_of_birth,
                          kot_cpr = a.kot_cpr,
                          address = a.address,
                          email = a.email,
                          telephone_number = a.telephone_number,
                          citizenship = a.citizenship
                      });
}

我得到一个错误,像"不能隐式转换类型System.Linq.Iqueryable到System.Collections.Generic。IEnumerable",这似乎并不重要我如何尝试和修复它(我已经尝试添加。tolist (). asqueryable (), First()等没有运气)。我认为这与申请人实体有关?

不能隐式地将IEnumerable类型转换为带有实体的IQueryable类型

这就是问题所在:

select new 
{
    ...
}

创建一个匿名类型的实例。你期望如何创建一个Business.Entities.EF.Applicant对象?

你可能很好只是需要改变你的代码:

select new Business.Entities.EF.Applicant
{
    ...
}

您需要更改代码。将代码更改为

select new Business.Entities.EF.Applicant
{
user_id = a.user_id,
first_name = a.first_name,
last_name = a.last_name,
login_name = u.login_name,
date_of_birth = a.date_of_birth,
kot_cpr = a.kot_cpr,
address = a.address,
email = a.email,
telephone_number = a.telephone_number,
citizenship = a.citizenship
}

select new返回匿名类型对象,而applicantQueryBusiness.Entities.EF.Applicant类型。因此,就像Jon Skeet所说的,返回预期类型的对象。