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

时间:2018-03-07 15:28:54

标签: c# entity-framework linq

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

这是我试过的。

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

 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已实际填充。

2 个答案:

答案 0 :(得分:0)

由于您的查询已经预测了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
});

答案 1 :(得分:0)

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

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

还要确保至少第一条记录的代码值为NOT NULL。如果没有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; }
}