मुझे कुछ अजीब/अप्रत्याशित व्यवहार का सामना करना पड़ा है जिसमें एक लिंक अभिव्यक्ति में Guid.ToString()
फ़ोरैच लूप में Guid.ToString()
से भिन्न परिणाम देता है।लिंक क्यों है। लिंक में पूंजीकृत स्ट्रिंग लौटने के लिए?
क्या विधि कर रही है:
प्रश्न में विधि बस एक वस्तु लेने और फिर मूल वस्तु से कोई नया दृश्य-मॉडल बनाता है। जिस कंपनी के लिए मैंने काम किया है, उसने फैसला किया है कि हमारे पुराने जेएसओएन सीरियलाइज़र में से एक के कारण ग्रिड को दृश्य-मॉडल पर अनुमति नहीं दी जाएगी, जिसमें गड्ड को सही ढंग से क्रमबद्ध नहीं किया गया था।
समस्या/अप्रत्याशित परिणाम:
जबकि डिबगिंग/मेरी विधि का परीक्षण मैंने पाया कि Linq अभिव्यक्ति मेरे द्वारा बनाए गए एक अजीब परिणाम लौट रहा था। मेरे ग्रिड को अपनी स्ट्रिंग प्रस्तुति में परिवर्तित करते समय, परिणाम स्वचालित रूप से पूंजीकृत किया जा रहा था। मुझे विश्वास नहीं था कि यह पहली बार लिंक अभिव्यक्ति थी, लेकिन एक बार जब मैंने लॉजिक को फोरैच लूप में परिवर्तित कर दिया था तो मुझे अपने गुड के निचले-चरण वाले स्ट्रिंग का प्रतिनिधित्व मिला।
उदाहरण कोड:
कृपया ध्यान दें कि lookupList (ID1 आईडी 2, ID3) के लिए संपत्ति प्रकार प्रकार Guid और NewClass पर सभी गुणों की हैं प्रकार स्ट्रिंग के सभी कर रहे हैं।
Linq अभिव्यक्ति:
List<NewClass> returnList = lookupList.Select(i => new NewClass {
Property1 = i.ID1.ToString(),
Property2 = i.ID2.ToString(),
Property3 = i.ID3.ToString(),
.....
}).ToList();
रिटर्न:
{
Property1=7081C549-64D6-458E-A693-0D2C9C47D183
Property2=06DD6A59-D339-4E15-89EA-48803DBA271E
Property3=9A876EDD-3B79-C27E-1680-E0820A0CD6EC
}
foreach पाश:
var returnList = new List<NewClass>();
foreach (var item in lookupList)
{
returnList.Add(new NewClass
{
Property1 = item.ID1.ToString(),
Property2 = item.ID2.ToString(),
Property3 = item.ID3.ToString(),
.....
});
}
रिटर्न:
{
Property1=7081c549-64d6-458e-a693-0d2c9c47d183
Property2=06dd6a59-d339-4e15-89ea-48803dba271e
Property3=9a876edd-3b79-c27e-1680-e0820a0cd6ec
}
प्रश्न:
यह क्यों हो रहा है और यह अपेक्षित व्यवहार है? मैं लिंकक अभिव्यक्ति और फोरैच लूप दोनों को उसी परिणाम को वापस करने की अपेक्षा करता हूं जब .ToString()
मेरे ग्रिड पर लागू होता है लेकिन किसी भी तरह यह नहीं है। मैंने यह भी जांच की है कि कक्षा में .ToString()
ओवरराइड नहीं हैं।
अग्रिम धन्यवाद।
अद्यतन:
lookupList
एक .ToList()
द्वारा नियंत्रित किया गया है इससे पहले कि यह मेरी विधि पूरी करता है। LookupList
प्रकार List<t>
है t
एक कस्टम व्यापार इकाई है जिसमें डेटाबेस के पास अतिरिक्त गुण नहीं हैं। माफ़ी, मैंने अपने मूल प्रश्न में यह स्पष्ट नहीं किया। ताकि आप LINQ to SQL
, और नहीं LINQ to object
, तो दो प्रश्नों ही नहीं हैं का उपयोग कर रहे
वहाँ एक डेटाबेस शामिल है? क्योंकि पहला कॉल आपके एसक्यूएल सर्वर के संदर्भ में निष्पादित किया जा सकता है, जबकि दूसरा सबसे निश्चित रूप से क्लियर के संदर्भ में निष्पादित करता है। यह वास्तव में 'लुकअपलिस्ट' पर निर्भर करता है। – Silvermind
इस समस्या को पुन: उत्पन्न नहीं कर सकता .NET 4.0 –
एक डेटाबेस शामिल है लेकिन परिणाम मेरी विधि को हिट करने से पहले ToList'ed किया गया है। लुकअपलिस्ट सूची है जहां टी एक कस्टम व्यावसायिक इकाई है जो डेटाबेस तालिका की तरह दिखती है लेकिन इसमें कुछ अतिरिक्त गुण हैं। –