访问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指令或程序集引用?)

我该如何做到这一点?

访问var中具有oracle查询结果的字段

看起来结果是某种形式的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";

我希望这是有道理的。