Estoy trabajando en un proyecto heredado que se desarrolló utilizando .NET Framework 2.0. En este proyecto, obtengo valores distintos DataRowCollection
por ItemNo
columna. Solo me interesa ItemNo
. El DataRow
consisten de ItemNo
, Qty
y Date
.
Estoy pensando en iterar DataRowCollection
y agregar el único ItemNo
en una lista de cadenas como se muestra a continuación (no probado)
var items = new List<string>();
foreach (DataRow orderItem in rows)
{
var itemNo = orderItem["ITEMNO"].ToString().Trim();
if(items.Find(delegate(string str) { return str == itemNo ;}) == null)
{
items.Add(itemNo);
}
}
¿Hay una mejor manera de hacer esto sin LINQ (.Net Framework 2.0 no le gusta LINQ)?
// Given a data table:
var dt = new DataTable();
dt.Columns.Add("ITEMNO");
dt.Rows.Add("1 ");
dt.Rows.Add(" 1");
dt.Rows.Add("2");
var dict = new Dictionary<string, bool>();
foreach(DataRow dr in dt.Rows)
{
var itemNo = dr["ITEMNO"].ToString().Trim();
// Take advantage of O(1) lookup:
if (!dict.ContainsKey(itemNo))
{
dict.Add(itemNo, true);
}
}
// Get list from dictionary keys:
var items = new List<string>(dict.Keys);
Si puede instalar .Net 3.5 en el servidor y hacer referencia a System.Core.dll en su aplicación, puede aprovechar HashSets que modificarían el código anterior para:
var hashSet = new HashSet<string>();
foreach(DataRow dr in dt.Rows)
{
var itemNo = dr["ITEMNO"].ToString().Trim();
// Only unique elements are added to the hash set,
// no need to check for duplicates
hashSet.Add(itemNo);
}
var items = new List<string>(hashSet);
El beneficio de usar HashSet sobre un diccionario es ciertamente trivial, pero lo preferiría ya que no me importa el valor bool arbitrario en el diccionario, pero debería cumplir con los requisitos de referencia y .Net 3.5.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras