我正在尝试使用c#执行原始查询。
这就是我所做的
var accounts = conn.Database.SqlQuery<IEnumerable<string>>("SELECT TOP 1 a.* FROM zipcodes_to_accounts AS c " +
"INNER JOIN accounts AS a ON a.id = c.account_id " +
"WHERE c.zip_code = @p0 "+
"ORDER BY a.completed_ll + a.completed_cp ASC", zipcode).ToArray();
然后我想获取第一条记录并将其转换为json对象。
if (accounts.Count() > 0)
{
return JsonConvert.SerializeObject( accounts.First() );
}
但查询给我一个错误
结果类型'System.Collections.Generic.IEnumerable`1 [System.String]'可能不是抽象的,必须包含默认构造函数。
accounts表有一些列是varchar,datetime,整数。如何才能使此查询生效?
已更新
将IEnumerable
转换为列表,就像它在答案中所建议的那样。但现在JsonConvert
正在返回一个空对象。这是我目前的代码
//getAccount
public string GetAccount()
{
string zipcode = StringHelpers.StringOrNull(Request["zip_code"]);
if (zipcode != null)
{
var accounts = conn.Database.SqlQuery<List<string>>("SELECT TOP 1 a.* FROM zipcodes_to_accounts AS c " +
"INNER JOIN accounts AS a ON a.id = c.account_id "+
"WHERE c.zip_code = @p0 "+
"ORDER BY a.completed_ll + a.completed_cp ASC", zipcode).ToList();
var firstAccount = accounts.FirstOrDefault();
if (firstAccount != null)
{
return JsonConvert.SerializeObject(firstAccount);
}
}
return "{}";
}
当我调试我的代码这是我看到的
答案 0 :(得分:4)
不确定您正在使用的ORM,但警告告诉您IEnumerable无法构建,因为它是一个接口。因此,SqlQuery
方法无法知道您期望的返回类型。
尝试用具体类型替换泛型约束:
var accounts = conn.Database.SqlQuery<string>("SELECT TOP 1 a.* FROM zipcodes_to_accounts AS c " +
"INNER JOIN accounts AS a ON a.id = c.account_id " +
"WHERE c.zip_code = @p0 "+
"ORDER BY a.completed_ll + a.completed_cp ASC", zipcode).ToArray();
答案 1 :(得分:2)
您要求IEnumerable<string>
这是一个界面。您需要选择一个实现IEnumerable
的类,例如List