繁体   English   中英

实体框架中的自定义SQL,结果为null对象

[英]Custom SQL in Entity Framework, results are objects of null

我正在尝试在实体框架中运行自定义SQL查询,并将结果放入特定的类中。 不幸的是里面的对象为空。

这是我尝试过的。

我已经声明了描述该对象的类。

 public class reportReservationReport
    {
        public string Code;
        public string UserName;
    }

然后,我运行自定义查询并尝试分配给该对象。

string sqlQuery = "select ReservationPackages.Code, UserName " +
                          "FROM ReservationPackages " ;

        var queryResult = DB.Database.SqlQuery<reportReservationReport>(sqlQuery);
        var query = from pro in queryResult
                    select new reportReservationReport() { Code = pro.Code, UserName = pro.UserName };

        List<reportReservationReport> results = query.ToList();



        string test = results[0].Code;

测试即将结束。

对于上面的示例,查询返回正确的数据,ReservationPackages.Code已实际填充。

由于查询已经投影了CodeUserName ,因此您需要创建一个类来读取投影,并将其用作SqlQuery<T>的通用参数:

internal sealed class UserInfo {
    string Code { get; set; }
    string UserName { get; set; }
}

string sqlQuery =
    "SELECT ReservationPackages.Code, ReservationPackages.UserName "
+   "FROM ReservationPackages" ;
var queryResult = DB.Database.SqlQuery<UserInfo>(sqlQuery);
var query = queryResult.Select(info => new reportReservationReport {
    Code = info.Code
,   UserName = info.UserName
});

无需再次选择查询结果。 请尝试以下操作:

List<reportReservationReport> results = DB.Database.SqlQuery<reportReservationReport>(sqlQuery).ToList();

还要确保至少第一条记录具有NOT NULL Code值。 如果没有ORDER BYWHERE Code IS NOT NULL (或PRIMARY KEY ),则不能保证第一条记录应为NOT NULL

另外,将Get Set访问器放在您的班级上:

public class reportReservationReport
{
    public string Code { get; set; }
    public string UserName { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM