访问var中具有oracle查询结果的字段
本文关键字:查询 结果 字段 oracle var 访问 | 更新日期: 2023-09-27 17:57:52
我有以下内容:
var conn = new DataStore(_db.ConnectionStrings.First(p => p.Name == "OracleConn").Value);
var results = conn .ExecuteQuery(_oracleQuery).Tables[0].AsEnumerable();
if (results.Count() > 0)
{
var record = results.First();
var result = new
{
success = true,
personId= QueryParse.ToString(record["personId"])
};
}
存储过程(_oracleQuery)为:
SELECT personID from People
我有以下内容:
foreach (var person in _db.People.OrderByDescending(p => p.LastUpdated))
{
data.Add(new List<string>
{
person.UserId,
person.FullName,
person.Title
}
}
但需要将oracle查询添加到其中,如果id存在,则显示"Y",否则显示"N"。我不能添加这个:
(results.Where(p => p.personID== person.personId).FirstOrDefault() == null? "N" : "Y")
当我得到以下错误消息时:
"System.Data.DataRow"不包含"personID"的定义,也找不到接受第一个类型为"System.DataDataRow"的参数的扩展方法"personID"(是否缺少using指令或程序集引用?)
我该如何做到这一点?
看起来结果是某种形式的DataRows枚举。正如我们在这里看到的,DataRow没有任何名为personId的方法或属性。这就是你在写p.personID 时出错的原因
这意味着您必须像以前一样使用列名来获取值,并确保为了进行比较而正确地进行了强制转换。
(results.Where(p => (int)p["personId"] == person.personId).FirstOrDefault() == null? "N" : "Y")
现在,当你写p["personId"]并且cast是int时,它会从p dataRow中获取personId,所以你可以正确地将其与person.personId中的任何内容进行比较。我还建议重写你的linq查询,这样你就可以使用.Any()使其更具可读性。
results.Any(p => (int)p["personId"] == person.personId) ? "Y" : "N";
我希望这是有道理的。