Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将LINQ查询结果转换为自定义模型列表_C#_Sql_Asp.net_Linq_Model View Controller - Fatal编程技术网

C# 将LINQ查询结果转换为自定义模型列表

C# 将LINQ查询结果转换为自定义模型列表,c#,sql,asp.net,linq,model-view-controller,C#,Sql,Asp.net,Linq,Model View Controller,各位晚上好 我有一个LINQ到SQL的查询结果,我想把这个结果转换成自定义模型类的列表 下面是班级模型: public class Beneficiary { public int BeneficiaryId { get; set; } [Required] public string FirstName { get; set; } [Required] public string LastName { g

各位晚上好

我有一个LINQ到SQL的查询结果,我想把这个结果转换成自定义模型类的列表

下面是班级模型:

public class Beneficiary
    {
        public int BeneficiaryId { get; set; }

        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }

        public DateTime? CreatedAt { get; set; }

        [Column(TypeName = "date")]
        public DateTime? BithDate { get; set; }

        public int? CommunityId { get; set; }
        public virtual Community Community { get; set; }

        [Required]
        public string Gender { get; set; }


        public string IdNumber { get; set; }

        [Required]
        [StringLength(50)]
        public string AppName { get; set; }

        [StringLength(50)]
        public string BeneficiaryNumber { get; set; }

        public int CompanyId { get; set; }
        public virtual Company Company { get; set; }

        public virtual ICollection<BeneficiaryProject> BeneficiaryProjects { get; set; }

        public virtual ICollection<Card> Cards { get; set; }

        public virtual ICollection<Invoice> Invoices { get; set; }
    }
上述查询已成功执行,但当我将
var列表
转换为
受益人
列表时,如下所示:

            List<Beneficiary> list1 = list.ToList<Beneficiary>();
List<Beneficiary> list1 = list.ToList();

从EF检索结果后转换为自定义类:

var list  = (
    from B in db.Beneficiaries
    join ben in db.BeneficiaryProjects on B.BeneficiaryId equals ben.BeneficiaryId
    where (ben.CardNeeded == true && ben.ProjectId == temp.ProjectId)
    select new {
        B.BeneficiaryId,
        B.FirstName,
        B.LastName,
        B.IdNumber,
        B.Gender
    }
).AsEnumerable()
.Select(B => new Beneficiary() {
    BeneficiaryId = B.BeneficiaryId,
    FirstName = B.FirstName,
    LastName = B.LastName,
    IdNumber = B.IdNumber,
    Gender = B.Gender
}).ToList();

注意:运行
ToList
时出现错误的原因是EF查询延迟执行。您的查询可能不正确,但唯一的方法是尝试获取其结果。

从EF检索结果后,将其转换为自定义类:

var list  = (
    from B in db.Beneficiaries
    join ben in db.BeneficiaryProjects on B.BeneficiaryId equals ben.BeneficiaryId
    where (ben.CardNeeded == true && ben.ProjectId == temp.ProjectId)
    select new {
        B.BeneficiaryId,
        B.FirstName,
        B.LastName,
        B.IdNumber,
        B.Gender
    }
).AsEnumerable()
.Select(B => new Beneficiary() {
    BeneficiaryId = B.BeneficiaryId,
    FirstName = B.FirstName,
    LastName = B.LastName,
    IdNumber = B.IdNumber,
    Gender = B.Gender
}).ToList();

注意:运行
ToList
时出现错误的原因是EF查询延迟执行。您的查询可能不正确,但唯一的方法是尝试获取其结果。

出现此错误的原因 (此行:)

应该是这样的:

int ProjectId = (from P in db.Projects where P.ContractId == id select P.ProjectId).FirstOrDefault();
然后将该值放入下一个查询:

... where (ben.CardNeeded == true && ben.ProjectId == ProjectId)

出现此错误的原因是什么 (此行:)

应该是这样的:

int ProjectId = (from P in db.Projects where P.ContractId == id select P.ProjectId).FirstOrDefault();
然后将该值放入下一个查询:

... where (ben.CardNeeded == true && ben.ProjectId == ProjectId)

我相信您不能将您的受益人类型的对象从LINQ中投影到实体到映射的实体对象

试试这个:

db.Beneficiaries.Join(db.BeneficiaryProjects, B => B.BeneficiaryId, ben => ben.BeneficiaryId, (B, ben) => new { B, ben })
                .Where(x => x.ben.CardNeeded == true && x.ben.ProjectId == temp.ProjectId)
                .Select(x => x.B)
                .ToList();

它是一个lamda表达式,应该做与LINQ查询相同的事情,但将选择受益模型对象并映射它。根据您的需要,
ToList()
可以替换为
AsQueryable()
AsEnumerable()

我相信您不能将您的受益人类型对象从LINQ to Entities中投影到映射的entity对象

试试这个:

db.Beneficiaries.Join(db.BeneficiaryProjects, B => B.BeneficiaryId, ben => ben.BeneficiaryId, (B, ben) => new { B, ben })
                .Where(x => x.ben.CardNeeded == true && x.ben.ProjectId == temp.ProjectId)
                .Select(x => x.B)
                .ToList();


它是一个lamda表达式,应该做与LINQ查询相同的事情,但将选择受益模型对象并映射它。根据您的需要,
ToList()
可以替换为
AsQueryable()
AsEnumerable()

您是否尝试过此方法:
List-benginiarylist=(您在此处的查询)。ToList()请注意,在调用
ToList
之前,查询本身不会执行,因此您可能认为它已成功执行,但事实上并非如此。查看您的查询,temp.ProjectID可能存在问题。是否缺少联接?是否尝试过此操作:
List-benginiarylist=(您在此处的查询).ToList()请注意,在调用
ToList
之前,查询本身不会执行,因此您可能认为它已成功执行,但事实上并非如此。查看您的查询,temp.ProjectID可能存在问题。您缺少联接吗?谢谢,我尝试了您的查询,但仍然得到以下异常<代码>类型为“System.Data.Entity.Core.EntityCommandExecutionException”的异常发生在EntityFramework.SqlServer.dll中,但未在用户代码中处理其他信息:执行命令定义时出错。有关详细信息,请参见内部异常。
@MGCR7这很奇怪。我编辑了答案,你能试一下更新的答案吗?这可能是因为尝试枚举(AsEnumerable())。您应该在原始查询中尝试我建议的解决方案。@dasblinkenlight仍然会得到与我在我的查询中键入的相同的异常comment@MGCR7我认为在这一点上,错误不再与类型转换有关。你确定你的数据库是正确的吗?谢谢,我试过你的查询,但我仍然得到以下异常
EntityFramework.SqlServer.dll中发生了类型为“System.Data.Entity.Core.EntityCommandExecutionException”的异常,但未在用户代码中处理其他信息:执行命令定义时出错。有关详细信息,请参见内部异常。
@MGCR7这很奇怪。我编辑了答案,你能试一下更新的答案吗?这可能是因为尝试枚举(AsEnumerable())。您应该在原始查询中尝试我建议的解决方案。@dasblinkenlight仍然会得到与我在我的查询中键入的相同的异常comment@MGCR7我认为在这一点上,错误不再与类型转换有关。您确定是针对正确的数据库运行此操作吗?谢谢,我尝试了您的建议,但我得到以下异常“类型的异常”System.Data.Entity.Core.EntityCommandExecutionException“发生在EntityFramework.SqlServer.dll中,但未在用户代码“@MGCR7”中处理。当您遇到异常时,请检查内部异常。。这会让您更深入地了解具体问题。谢谢,我尝试了您的建议,但我得到了以下异常“类型的异常”System.Data.Entity.Core.EntityCommandExecutionException“发生在EntityFramework.SqlServer.dll中,但未在用户代码“@MGCR7”中处理。当您遇到异常时,请检查内部异常。。这会让您更深入地了解具体问题。查看原始查询,temp.ProjectID可能存在问题。你错过了一个连接吗?你的意思是我错过了一个连接吗?什么是temp.ProjectId,或者它来自哪里?它是一个临时表吗?我得到的projectId如下:var projects=db.projects.Where(p=>p.construcd==id);foreach(项目中的var-temp){//这里的问题代码},这是真的吗??其中
id
是一个函数的输入,这是您的问题!您需要将查询(对于projectId)查询转换为可查询对象,或者在将该值包含在主查询中之前获取该值。查看原始查询,temp.projectId可能存在问题。你错过了一个连接吗?你的意思是我错过了一个连接吗?什么是temp.ProjectId,或者它来自哪里?它是一个临时表吗?我得到的projectId如下:var projects=db.projects.Where(p=>p.construcd==id);foreach(项目中的var-temp){//这里的问题代码},这是真的吗??其中
id
是一个函数的输入,这是您的问题!你需要欺骗