我一直试图围绕正确的方式使用EF5的DbContext
来使用SQL查询数据。我完全知道EF是一个ORM,通常用于linqTOentities和实体对象。但我有一个有趣的案例需要SQL。
以下是我一直在使用的示例代码:
testQuery = "select 'HITHERE' as firstval, 'HOTHERE' as secondval;";
var results = DataContext.Database.SqlQuery<string>(testQuery);
当我运行上面的代码(C#)时,我收到以下错误:
{"The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types."}
我认为该错误与string
的{{1}}部分不是要绑定的正确类型有关。所以我把代码更改为:
.SqlQuery<string>(testQuery)
当我运行这个更新的代码时,testQuery = "select 'HITHERE' as firstval, 'HOTHERE' as secondval;";
var results = DataContext.Database.SqlQuery<List<string>>(testQuery);
没有值,count是0.但是,当我在SSMS中运行测试sql查询时,我得到你所期望的;一行,两个带列名称的值。 firstVal = HITHERE和secondVal = HOTHERE。
如何将这些选择值绑定到C#中的变量与DbContext?
答案 0 :(得分:3)
DataContext.Database.SqlQuery<string>(testQuery);
预计单个字符串值每行,因此以下查询将满足此设置
select 'HITHERE' as firstval
union
select 'HOTHERE' as secondval;";
对于您正在运行的查询,您需要一个具有2个字符串属性的类(或某种类型)
public class resultsClass
{
public string firstval { get; set; }
public string secondval { get; set; }
}
然后你可以做
var results = DataContext.Database.SqlQuery<resultsClass>(testQuery);
应该包含一个结果
更新
您的示例似乎包含键/值对 - 您是否可以使用它?
select 'firstValue', 'HITHERE'
union
select 'secondValue', 'HOTHERE'
public class resultsClass
{
public string key { get; set; }
public string value { get; set; }
}
var results = DataContext.Database.SqlQuery<resultsClass>(testQuery);