1

我一直在尝试使用 EF5DbContext使用 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不是.SqlQuery<string>(testQuery)要绑定的正确类型有关。所以我把代码改成这样:

testQuery = "select 'HITHERE' as firstval, 'HOTHERE' as secondval;";
var results = DataContext.Database.SqlQuery<List<string>>(testQuery);

当我运行这个更新的代码时,results没有值,计数为 0。但是,当我在 SSMS 中运行测试 sql 查询时,我得到了你所期望的;一行,两个带有列名的值。firstVal = HITHERE 和 secondVal = HOTHERE。

如何使用 DbContext 将这些选择值绑定到 C# 中的变量?

4

1 回答 1

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);
于 2013-06-26T19:12:20.393 回答