c# - obtener - Convertir el resultado de la consulta de Linq al diccionario
obtener key de un diccionario c# (4)
Quiero agregar algunas filas a una base de datos utilizando Linq a SQL, pero quiero hacer una "comprobación personalizada" antes de agregar las filas para saber si debo agregar, reemplazar o ignorar las filas que se encuentran. Me gustaría mantener el tráfico entre el cliente y el servidor de base de datos lo más bajo posible y minimizar el número de consultas.
Para hacer esto, quiero obtener la menor información necesaria para la validación, y solo una vez al comienzo del proceso.
Estaba pensando en hacer algo como esto, pero obviamente, no funciona. ¿Alguien tiene una idea?
Dictionary<int, DateTime> existingItems =
(from ObjType ot in TableObj
select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
)
Lo que me gustaría tener al final sería un Diccionario, sin tener que descargar todos los objetos ObjectType de TableObject.
También consideré el siguiente código, pero estaba tratando de encontrar una manera adecuada:
List<int> keys = (from ObjType ot in TableObj orderby ot.Key select ot.Key).ToList<int>();
List<DateTime> values = (from ObjType ot in TableObj orderby ot.Key select ot.Value).ToList<int>();
Dictionary<int, DateTime> existingItems = new Dictionary<int, DateTime>(keys.Count);
for (int i = 0; i < keys.Count; i++)
{
existingItems.Add(keys[i], values[i]);
}
Intenta lo siguiente
Dictionary<int, DateTime> existingItems =
(from ObjType ot in TableObj).ToDictionary(x => x.Key);
O la versión inferida tipo de pleno derecho
var existingItems = TableObj.ToDictionary(x => x.Key);
Mirando tu ejemplo, creo que esto es lo que quieres:
var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
Trate de usar el método ToDictionary
así:
var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
.ToDictionary( t => t.Key, t => t.TimeStamp );
Usar espacio de nombres
using System.Collections.Specialized;
Hacer instancia de la clase DataContext
LinqToSqlDataContext dc = new LinqToSqlDataContext();
Utilizar
OrderedDictionary dict = dc.TableName.ToDictionary(d => d.key, d => d.value);
Para recuperar los valores usa el espacio de nombres.
using System.Collections;
ICollection keyCollections = dict.Keys;
ICOllection valueCollections = dict.Values;
String[] myKeys = new String[dict.Count];
String[] myValues = new String[dict.Count];
keyCollections.CopyTo(myKeys,0);
valueCollections.CopyTo(myValues,0);
for(int i=0; i<dict.Count; i++)
{
Console.WriteLine("Key: " + myKeys[i] + "Value: " + myValues[i]);
}
Console.ReadKey();