0

我有来自存储过程的 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();
            }
        }
4

2 回答 2

0

您需要自己从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"]);
                      }
                    }
                }
            }
于 2013-07-30T21:52:55.123 回答
0

您不能直接在非泛型 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"]);
    }
} 
于 2013-07-30T22:06:22.217 回答