Convertir el resultado de la consulta Linq en un diccionario

Resuelto Tipx asked hace 15 años • 4 respuestas

Quiero agregar algunas filas a una base de datos usando Linq to SQL, pero quiero hacer una "verificación personalizada" antes de agregar las filas para saber si debo agregar, reemplazar o ignorar las filas entrantes. Me gustaría mantener el tráfico entre el cliente y el servidor de base de datos lo más bajo posible y minimizar la cantidad de consultas.

Para hacer esto, quiero obtener la menor cantidad de 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 forma 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]);
}
Tipx avatar Jun 05 '09 08:06 Tipx
Aceptado

Intente usar el ToDictionarymétodo así:

var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
                   .ToDictionary( t => t.Key, t => t.TimeStamp );
tvanfosson avatar Jun 05 '2009 02:06 tvanfosson

Mirando tu ejemplo, creo que esto es lo que quieres:

var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);
BFree avatar Jun 05 '2009 02:06 BFree

Prueba lo siguiente

Dictionary<int, DateTime> existingItems = 
    (from ObjType ot in TableObj).ToDictionary(x => x.Key);

O la versión completa con inferencia de tipo

var existingItems = TableObj.ToDictionary(x => x.Key);
JaredPar avatar Jun 05 '2009 01:06 JaredPar

Usar espacio de nombres

using System.Collections.Specialized;

Hacer instancia de DataContextclase

LinqToSqlDataContext dc = new LinqToSqlDataContext();

Usar

OrderedDictionary dict = dc.TableName.ToDictionary(d => d.key, d => d.value);

Para recuperar los valores utilice 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();
Salman Mushtaq avatar Oct 16 '2017 12:10 Salman Mushtaq