在ienumerable中从循环中选择某个列值

本文关键字:循环 ienumerable 选择 | 更新日期: 2023-09-27 18:25:30

我从一个存储过程中得到了一个IEnumerable的结果,我正在循环这些结果以获得列(GUID)的值。我不确定如何从foreach循环中的结果集中获取Guid列

这就是我的

var results = GetGuids(instId);
foreach (var item in results)
{
}
public IEnumerable GetGuids(int id)
        {
            using (SqlCommand _command = new SqlCommand("StoredProc"))
            {
                _command.Connection = new SqlConnection(conString);
                _command.Connection.Open();
                _command.CommandType = CommandType.StoredProcedure;
                _command.Parameters.AddWithValue("@ItemID", id);
                return _command.ExecuteReader();
            }
        }

在ienumerable中从循环中选择某个列值

您不能直接在非泛型IEnumerable上使用大多数普通的linq扩展方法。。。但是您可以调用.Cast<T>()使其成为IEnumerable<T>。到那时,事情变得更容易了:

public IEnumerable<Guid> GetGuids(int id)
{
    using (SqlCommand _command = new SqlCommand("StoredProc"))
    {
        _command.Connection = new SqlConnection(conString);
        _command.Connection.Open();
        _command.CommandType = CommandType.StoredProcedure;
        _command.Parameters.Add("@ItemID", SqlDbType.Int).Value =  id;
            return _command.ExecuteReader()
                  .Cast<DbDataRecord>()
                  .Select(r => (Guid)r["GuidColumn"]);
    }
} 

您需要自己从SqlDataReader 中生成结果

 var results = GetGuids(instId);
    foreach (var item in results)
    {
    }
    public IEnumerable<Guid> GetGuids(int id)
            {
                using (SqlCommand _command = new SqlCommand("StoredProc"))
                {
                    _command.Connection = new SqlConnection(conString);
                    _command.Connection.Open();
                    _command.CommandType = CommandType.StoredProcedure;
                    _command.Parameters.AddWithValue("@ItemID", id);
    var guids = new List<Guid>();
                   using (SqlDataReader reader = _command.ExecuteReader())
                   {
                     while (reader.Read()
                     {
                    guids.Add( (Guid)reader["GuidColumn"]);
                      }
                    }
                }
            }