【发布时间】:2015-07-27 16:42:49
【问题描述】:
当我不知道需要返回的类型时,我无法针对实体数据集运行原始 sql。
该场景是页面根据用户选择的选项动态生成 sql(构建语句的“选择”和“位置”部分) 然后尝试使用:
string sSQL = "SELECT " + sSelect + " FROM dbo.Staff ";
if (!string.IsNullOrWhiteSpace(sWhere)) { sSQL += "WHERE " + sWhere; }
DAL.AcdmContext ds = new DAL.AcdmContext();
var resultSet = ds.Database.SqlQuery(sSQL).ToList();
似乎它不能为结果集使用匿名类型。问题是因为 select 语句是动态生成的,所以我不能事先为结果集生成一个类或类似的 - 组合太多了。
我可以提取每一列的查询,或者按一列查询
var resultSet = ds.Database.SqlQuery<string>(sSQL).ToList();
但我无法找到一种方法来处理任何其他数量的列 - 我试过 <string[]> 和 IEnumerable<string>
我最后的想法是提取整组列并在事后将其过滤为我需要的内容,但这似乎很浪费。有没有更好的解决方案?
(哦,在任何人说之前,我知道我应该在查询中使用参数 - 我暂时把它们拿出来尝试让它工作)
谢谢!
【问题讨论】:
-
不幸的是,我不认为 EF 是为这种情况而构建的。在我看来,可能是时候使用一个好的老式 DataReader 了。 叹息...
标签: c# sql asp.net sql-server entity-framework