我有一个只想返回一条记录的方法,但我不能使用 FirstOrDefault
. 和数据库的连接很好,我已经试过了。
我想找到传递一些值的记录。
这就是我所尝试的:
public async Task<CorridoioWebResponse> GetCorridoiWeb_ID(string stab, string maga, string area, Int32 cors)
{
string strsql = string.Empty;
string strErrore = string.Empty;
string strConnessione = _configuration.GetConnectionString("ConnDB");
SqlServerCompiler compiler = new SqlServerCompiler();
CorridoioWebResponse coridoio;
using (IDbConnection cn = new SqlConnection(strConnessione))
{
using (var db = new QueryFactory(cn, compiler))
{
strsql = "SELECT * from tmhit.CORRIDOI_CORSIE WHERE STAB=" + stab + "AND MAGA =" + maga + "AND AREA=" + area + "AND CORS=" + cors;
//strsql = "SELECT top 1 STAB, MAGA, AREA, CORS from tmhit.CORRIDOI_CORSIE WHERE STAB=" + stab + "AND MAGA =" + maga + "AND AREA=" + area + "AND CORS=" + cors;
//SELECT top 1 STAB, MAGA, AREA, CORS from tmhit.CORRIDOI_CORSIE WHERE STAB = 1 and MAGA = 0 and AREA = 0 and CORS = 9
var _corridoio = await cn.QueryAsync<CorridoioWebResponse>(strsql);
if (_corridoio.Count() == 0)
throw new ToyotaException("Non ci sono corridoi mappati");
coridoio = _corridoio;
}
}
return coridoio;
}
型号:
public class CorridoioWebResponse
{
public string stab { get; set; }
public string maga { get; set; }
public string area { get; set; }
public Int32 cors { get; set; }
}
它给我的错误是:
无法隐式地将类型“system.collections.generic.ienumerable<modelsome.model\u webinterface.mapatura.corridoiowebresponse>”转换为“modelsomemodel\u webinterface.mapatura.corridoiowebresponse”。
6条答案
按热度按时间vq8itlhq1#
问题是
await cn.QueryAsync<CorridoioWebResponse>(strsql)
退货IEnumerable<CorridoioWebResponse>
你想把它分配给CorridoioWebResponse coridoio
和获取类型不匹配错误。尝试以下操作:
coridoio = _corridoio.FirstOrDefault();
(别忘了using System.Linq
)z8dt9xmd2#
使用这种代码字符串连接来生成查询和返回
IEnumerable<>
方法仅返回单个项时的结果。现在,出现编译错误。即使它是固定的,当文本值被注入到查询中时,也会出现运行时错误。子字符串周围没有空格,因此整个where子句将无效:
WHERE STAB=123AND MAGA =345AND CORS=
将代码替换为:这将按名称传递参数值并返回第一个结果
eqqqjvef3#
我看到了错误:
modelsome.model\u webinterface是不同的modelsomemodel\u webinterface
你看,在s0me.model和\u corridoo之间,这是一个列表,我想
你应该用同样的型号。
nr9pn0ug4#
似乎更像是sql问题而不是c问题。
试试这个:
编辑:
更改此项:
对此:
yftpprvb5#
如果你不能使用
FirstOrDefault()
然后使用ToList()
:b09cbbtk6#
await cn.QueryAsync<CorridoioWebResponse>(strsql)
总是返回IEnumerable
,因为QueryAsync
是与sql表相关的,想想看,sql表就像一个IEnumerable
列表。你的目标是(
coridoio
)类型应为IEnumerable<CorridoioWebResponse>
然后你可以用coridoio.FirstOrDefault()
把这个还给我。