Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Asp.net mvc 仅获取实体框架所需的内容_Asp.net Mvc_Entity Framework_Linq To Entities - Fatal编程技术网

Asp.net mvc 仅获取实体框架所需的内容

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

通过与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
                     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的记录时不引发异常进行了很好的解释?