c# - लिंक क्वेरी परिणाम को शब्दकोश में कनवर्ट करें




linq linq-to-sql todictionary (5)

मैं लिंक से एसक्यूएल का उपयोग कर डेटाबेस में कुछ पंक्तियां जोड़ना चाहता हूं, लेकिन मैं पंक्तियों को जोड़ने से पहले "कस्टम चेक" बनाना चाहता हूं, यह जानने के लिए कि क्या मुझे इनकमिंग पंक्तियों को जोड़ना, प्रतिस्थापित करना या अनदेखा करना है। मैं क्लाइंट और डीबी सर्वर के बीच जितना संभव हो उतना कम ट्रैफिक रखना चाहता हूं और प्रश्नों की संख्या को कम करना चाहता हूं।

ऐसा करने के लिए, मैं प्रमाणीकरण के लिए जरूरी छोटी जानकारी प्राप्त करना चाहता हूं, और प्रक्रिया की शुरुआत में केवल एक बार।

मैं ऐसा कुछ करने की सोच रहा था, लेकिन जाहिर है, यह काम नहीं करता है। किसी के पास कोई विचार है?

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

अंत में जो मैं चाहता हूं वह एक शब्दकोश होगा, बिना टेबल ऑब्जेक्ट से ऑब्जेक्ट टाइप ऑब्जेक्ट डाउनलोड किए।

मैंने निम्नलिखित कोड भी माना, लेकिन मैं एक उचित तरीका खोजने की कोशिश कर रहा था:

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

Answers

अपना उदाहरण देखकर, मुझे लगता है कि यह वही है जो आप चाहते हैं:

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

नामस्थान का प्रयोग करें

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

निम्नलिखित कोशिश करें

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

या पूरी तरह से विकसित प्रकार संदर्भित संस्करण

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

ToDictionary विधि का उपयोग करने का प्रयास करें:

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

//Create DataTable 
DataTable dt= new DataTable();
dt.Columns.AddRange(New DataColumn[]
{
   new DataColumn("ID",typeOf(System.Int32)),
   new DataColumn("Name",typeOf(System.String))

});

//Fill with data

dt.Rows.Add(new Object[]{1,"Test1"});
dt.Rows.Add(new Object[]{2,"Test2"});

//Now  Query DataTable with linq
//To work with linq it should required our source implement IEnumerable interface.
//But DataTable not Implement IEnumerable interface
//So we call DataTable Extension method  i.e AsEnumerable() this will return EnumerableRowCollection<DataRow>


// Now Query DataTable to find Row whoes ID=1

DataRow drow = dt.AsEnumerable().Where(p=>p.Field<Int32>(0)==1).FirstOrDefault();
 // 




c# linq linq-to-sql todictionary