我正在尝试在实体框架中运行自定义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已实际填充。
答案 0 :(得分:0)
由于您的查询已经预测了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
});
答案 1 :(得分:0)
无需再次选择查询结果。请尝试以下方法:
List<reportReservationReport> results = DB.Database.SqlQuery<reportReservationReport>(sqlQuery).ToList();
还要确保至少第一条记录的代码值为NOT NULL
。如果没有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; }
}