c# - تحويل لينك الاستعلام النتيجة إلى قاموس




linq linq-to-sql todictionary (5)

استخدم مساحة الاسم

using System.Collections.Specialized;

جعل مثال من DataContext فئة

LinqToSqlDataContext dc = new LinqToSqlDataContext();

استعمال

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

لاسترداد القيم استخدم مساحة الاسم

   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();

أريد إضافة بعض الصفوف إلى قاعدة بيانات باستخدام Linq إلى SQL ، لكنني أرغب في إجراء "فحص مخصص" قبل إضافة الصفوف لمعرفة ما إذا كان يجب إضافة أو استبدال أو تجاهل الصفوف غير العاملة. أود الحفاظ على التراكب بين العميل وخادم DB منخفضًا قدر الإمكان وتقليل عدد طلبات البحث.

للقيام بذلك ، أريد أن أحضر أقل قدر من المعلومات المطلوبة للتدقيق ، وفقط مرة واحدة في بداية العملية.

كنت أفكر في القيام بشيء من هذا القبيل ، ولكن من الواضح أنه لا يعمل. أي شخص لديه فكرة؟

Dictionary<int, DateTime> existingItems = 
    (from ObjType ot in TableObj
        select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
    )

ما أريد أن يكون في النهاية هو قاموس ، دون الحاجة إلى تنزيل كائنات ObjectType بأكملها من TableObject.

نظرت أيضًا في الشفرة التالية ، لكنني كنت أحاول العثور على طريقة مناسبة:

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]);
}

جرب استخدام طريقة ToDictionary مثل:

var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
                   .ToDictionary( t => t.Key, t => t.TimeStamp );

حاول القيام بما يلي

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

أو النسخة الكاملة من النسخة المتضمنة

var existingItems = TableObj.ToDictionary(x => x.Key);

بالنظر إلى المثال الخاص بك ، أعتقد أن هذا هو ما تريده:

var dict = TableObj.ToDictionary(t => t.Key, t=> t.TimeStamp);

بالنسبة لك LINQers هناك الذين لا يستخدمون أبداً منشئ القاموس العادي:

myCollection.ToDictionary(x => x.PartNumber, x => x.PartDescription, StringComparer.OrdinalIgnoreCase)




c# linq linq-to-sql todictionary