[英]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已实际填充。
由于查询已经投影了Code
和UserName
,因此您需要创建一个类来读取投影,并将其用作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 BY
或WHERE 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.