2015-03-25 8 views
12

मैं एक मॉडल में एक पोको मानचित्रण रहा हूँ, नीचे दिए गए कोडप्रचार चर (x => नई

var noneRequiredUserDocuments = new List<NoneRequiredUserDocument>(); 
var docs = studentDocuments.Where(x => x.RequiredUserDocumentId == null).ToList(); 
noneRequiredUserDocuments = docs.Select(x => new NoneRequiredUserDocument 
    { 
     StudentDocument = x, 
     Src = _storageService.GetFileUrl(x.FileName), 
     ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75) 

    }).ToList(); 

मेरे समस्या है पता चला है कि इस लाइन ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl में (एसआरसी, 75) , एसआरसी संदर्भ में मौजूद नहीं है। क्या मेरे पास चयन के भीतर एक चर घोषित करने का कोई तरीका है कि मैं linq के भीतर पुन: उपयोग कर सकता हूं? मैं _storageService.GetFileUrl को दो बार कॉल नहीं करना चाहता हूं।

धन्यवाद

उत्तर

24

आप एक Select इस तरह के अंदर एक चर घोषणा कर सकते हैं: -

noneRequiredUserDocuments = docs.Select(x => 
    { 
     var src= _storageService.GetFileUrl(x.FileName); 
     return new NoneRequiredUserDocument 
    { 
     StudentDocument = x, 
     Src = src, 
     ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(src, 75); 
    }; 
    }).ToList(); 

query syntax में ऐसा करने के बराबर है करने के लिए: -

from x in docs 
let src= _storageService.GetFileUrl(x.FileName) 
select and so on.. 
+1

और उसके बाद इसे 'एसआरसी =' भाग में भी प्रयोग करें, केवल एस्थेटिक्स के लिए। –

+0

@ हेंकहोल्टरमैन - दुह! धन्यवाद सही :) –

2

आप अज्ञात प्रकार के अस्थायी संग्रह को पेश कर सकते हैं, डब्ल्यू ith सभी आवश्यक डेटा:

noneRequiredUserDocuments = docs 
    .Select(x => new { Data = x, Src = _storageService.GetFileUrl(x.FileName) } 
    .Select(x => new NoneRequiredUserDocument 
    { 
     StudentDocument = x.Data, 
     Src = x.Src 
     ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(x.Src, 75) 
    }).ToList(); 
+0

क्यों वह अगर वह लैम्ब्डा में स्थानीय चर का उपयोग कर सकते गुमनाम प्रकार का उपयोग करना पड़ता है? –

+0

@AlexSikilinda, क्योंकि यह –

+1

करने की संभावनाओं में से एक है क्योंकि आप अज्ञात और दृढ़ता से टाइप किए गए दृष्टिकोण दोनों का उपयोग कर सकते हैं - मुझे लगता है कि बाद वाला पसंदीदा दृष्टिकोण होना चाहिए। – Veverke

5

आप बना सकते हैं लैम्ब्डा अभिव्यक्ति के भीतर एक ही कथन चलाने के बजाए एक नियमित कोड ब्लॉक, इस तरह आप केवल एक चर "src" घोषित कर सकते हैं और यह पूरे पूरे समय उपलब्ध होगा ब्लॉक - नियमित दायरे के नियमों का पालन करें।

noneRequiredUserDocuments = docs.Select(x => { 
     var src = _storageService.GetFileUrl(x.FileName); 
     return 
      new NoneRequiredUserDocument 
      { 
       StudentDocument = x, 
       Src = src, 
       ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75) 
       }; 
    }).ToList(); 
3

आप "दो" कीवर्ड का उपयोग कर सकते हैं:

var list = (from x in docs 
      let temp = _storageService.GetFileUrl(x.FileName) 
      select new NoneRequiredUserDocument 
      { 
       StudentDocument = x, 
       Src = temp, 
       ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(temp, 75) 
      }).ToList(); 
संबंधित मुद्दे