Asp.net mvc 仅获取实体框架所需的内容
通过与SQL Server的普通连接,您可以在简单的SELECT语句中指定要返回的列 对于EF:Asp.net mvc 仅获取实体框架所需的内容,asp.net-mvc,entity-framework,linq-to-entities,Asp.net Mvc,Entity Framework,Linq To Entities,通过与SQL Server的普通连接,您可以在简单的SELECT语句中指定要返回的列 对于EF: Dim who = context.Doctors.Find(3) ' Primary key is an integer 以上返回实体拥有的所有数据。。。但是我只想用SQL做你能做的,只想得到我需要的 这样做: Dim who= (From d In contect.Doctors Where d.Regeneration = 3
Dim who = context.Doctors.Find(3) ' Primary key is an integer
以上返回实体拥有的所有数据。。。但是我只想用SQL做你能做的,只想得到我需要的
这样做:
Dim who= (From d In contect.Doctors
Where d.Regeneration = 3
Select New Doctor With {.Actor = d.Actor}).Single
给我这个错误:
无法在LINQ to Entities查询中构造实体或复杂类型XXXXX
所以。。。如何仅从一个实体返回选定数据?您只需执行以下操作:
Dim who= (From d In contect.Doctors
Where d.Regeneration = 3
Select d.Actor).Single
基本上,我不知道为什么,但是Linq不能创建复杂类型。如果您正在创建一个匿名类型(如c代码),那么它将起作用
var who = (from x in contect.Doctors
where x.Regeneration == 3
select new { Actor = x.Actor }).Single();
然后你就可以走了
var doctor = new Doctor() {
Actor = who.Actor
};
但它不能像您尝试使用的那样将其构建为强类型或复杂类型
var who = (from x in contect.Doctors
where x.Regeneration == 3
select new Doctor { Actor = x.Actor }).Single();
此外,您可能需要小心使用single,如果没有具有再生编号的医生,或者有多个医生,它将抛出异常,singleordefault更安全,但如果有多个匹配,它将抛出异常。First或Firstordefault是更好的选项First仅在不存在异常时才会抛出异常,Firstordefault可以处理几乎任何事情最好的方法是在ViewModel或DTO中设置所需的属性(如果处理的是更高级别) 然后,作为示例,ViewModel将是:
public class DoctorViewModel{
public string Actor {get;set;}
// You can add as many properties as you want
}
那么查询将是:
var who = (From d In contect.Doctors
Where d.Regeneration = 3
Select New DoctorViewModel {Actor = d.Actor}).Single();
很抱歉,我用C编写了代码,但我认为想法很清楚:试试这个
Dim who = contect.Doctors.SingleOrDefault(Function(d) d.Regeneration = 3).Actor
有关解决方案,请参阅。@JessevanAssen nice链接,并对注释中为什么没有再生==3的记录时不引发异常进行了很好的解释?