C# 将LINQ查询结果转换为自定义模型列表
各位晚上好 我有一个LINQ到SQL的查询结果,我想把这个结果转换成自定义模型类的列表 下面是班级模型: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
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
是一个函数的输入,这是您的问题!你需要欺骗