2011-08-04 15 views
6

कैसे मैं, अनाम प्रकार के साथ सूची लौट सकते हैं क्योंकि इस कोड के साथ मैंवापसी सूची

मिल "प्रकार या नाम स्थान नाम 'टी' नहीं पाया जा सका (यदि आप एक निर्देश का उपयोग याद कर रहे हैं या एक विधानसभा संदर्भ?) "

मैं केवल IdMember और उपयोगकर्ता नाम वापसी की जरूरत है, धन्यवाद

public static List<T> GetMembersItems(string ProjectGuid) 
    { 
     using (PMEntities context = new PMEntities("name=PMEntities")) 
     { 
      var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information") 
         .Where(p => p.Knowledge_Project.Guid == ProjectGuid) 
         .Select(row => new { IdMember = row.IdMember, UserName = row.Profile_Information.UserName }); 

      return items.ToList(); 
     } 
    } 
+0

एक सामान्य वापसी प्रकार का उपयोग करना चाहते है कि आप इसे एक अतिरिक्त '' इस तरह के साथ एक सामान्य विधि बनाने के लिए आवश्यकता होगी: 'सार्वजनिक स्थैतिक सूची GetMembersItems (स्ट्रिंग प्रोजेक्टगुइड)'। लेकिन आपको अभी भी अन्य समस्याएं होंगी ... –

+0

[वापसी का अनाम प्रकार?] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/534690/return-anonymous-type) – nawfal

उत्तर

7

के रूप में याकूब ने कहा कि आप एक गुमनाम प्रकार वापस नहीं लौट सकते, लेकिन आप एक नया वर्ग और उपयोग कर सकते हैं यह आपके चयन कथन के अंदर है। लिंक टू एसक्यूएल के लिए एक समान सवाल है। एक ही विधि इकाई ढांचे पर लागू हो सकती है।

LinqToSql Anonymous Type

5

क्योंकि आप एक गुमनाम प्रकार की वस्तुओं के लिए लौट रहे, तो आप उस की घोषणा नहीं कर सकते हैं विधि के लिए अपनी वापसी प्रकार में। जेनेरिक <T> का आपके प्रयास का उपयोग इस के लिए काम नहीं करेगा। इस तरह की विधि घोषित करने के लिए कोई प्रकार का सुरक्षित तरीका नहीं है। यदि आप अपना रिटर्न टाइप IList के रूप में घोषित करते हैं तो उसे काम करना चाहिए, लेकिन आपके पास अभी भी प्रकार की सुरक्षा नहीं होगी।

आप वास्तव में प्रकार को घोषित करने से बेहतर हैं।

अद्यतन:

एक सरल वापसी प्रकार की घोषणा इतना बुरा नहीं है। आप इस प्रकार का वर्ग लिख सकते हैं:

public class MemberItem 
{ 
    public string IdMember { get; set; } 
    public string UserName { get; set; } 
} 

और फिर इस तरह से अपनी विधि लिखें:

public static List<MemberItem> GetMembersItems(string ProjectGuid) 
{ 
    using (PMEntities context = new PMEntities("name=PMEntities")) 
    { 
     var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information") 
        .Where(p => p.Knowledge_Project.Guid == ProjectGuid) 
        .Select(row => new MemberItem { IdMember = row.IdMember, UserName = row.Profile_Information.UserName }); 

     return items.ToList(); 
    } 
} 
+0

उत्तर के लिए धन्यवाद, जो सबसे अच्छा तरीका है इस चयन के साथ एक सूची वापस करने के लिए? – Pablogrind

+1

नमूना – Jacob

+0

के लिए मेरा अपडेट देखें आपकी मदद के लिए धन्यवाद जैकोब – Pablogrind

3

गुमनाम प्रकार की गुंजाइश विधि है जिसमें वे परिभाषित कर रहे हैं तक सीमित हैं। आपके मामले में, आप प्रासंगिक गुणों के साथ एक अलग वर्ग की बेहतर घोषणा करते हैं और उस वर्ग के उदाहरणों का संग्रह वापस करते हैं। उदाहरण के लिए

public class UserDetail 
{ 
    public int Id{get;set;} 
    public string UserName {get;set;} 
} 

public static List<UserDetail> GetMembersItems(string ProjectGuid) 
    { 
     using (PMEntities context = new PMEntities("name=PMEntities")) 
     { 
      var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information") 
         .Where(p => p.Knowledge_Project.Guid == ProjectGuid) 
         .Select(row => new UserDetail{ IdMember = row.IdMember, UserName = row.Profile_Information.UserName }); 

      return items.ToList(); 
     } 
    } 
11

वर्ग टपल <> इस तरह की स्थितियों के लिए किया जाता है। जैसा कि पहले से सुझाया गया कस्टम क्लास बनाना स्पष्ट है, लेकिन टुपल को भी काम मिल जाता है।

उदा।

.Select(row => new Tuple<int,string>(row.IdMember,row.Profile_Information.UserName)) 

तार के दूसरे पक्ष पर सदस्य गुण का उपयोग करने की है, तो आप का उपयोग करना होगा: NameValueCollection या KeyValuePair बजाय:

var id=t.Item1 
var name=t.Item2 
+3

टुपल्स इकाई ढांचे में काम नहीं करते हैं क्योंकि आपको उन्हें अपने इंटियालाइज़र फ़ंक्शन और इकाई फ्रेमवर्क के साथ बनाने की आवश्यकता होती है, केवल आपको डिफ़ॉल्ट कन्स्ट्रक्टर – Rabbi

+0

@ रब्बी के साथ प्रकारों का उपयोग करने की अनुमति मिलती है: आप एक प्रोजेक्ट कर सकते हैं गुमनाम प्रकार को एक संख्यात्मक के रूप में और फिर स्मृति में प्रोजेक्ट करने के लिए एक tuple का उपयोग करें। और देखें: http://stackoverflow.com/questions/2118688/return-tuple-from-ef- चयन करें – arviman

+0

ValueTuple के बारे में कैसे? – Shimmy

0

आप प्रकार लौट सकते हैं। अज्ञात प्रकार वापसी प्रकार नहीं हो सकता है।

1

बस का उपयोग करें और ArrayList बजाय

public static ArrayList GetMembersItems(string ProjectGuid) 
    { 
     ArrayList items = new ArrayList(); 

       items.AddRange(yourVariable 
         .Where(p => p.Knowledge_Project.Guid == ProjectGuid) 
         .ToList()); 
      return items; 
    } 
1

आप उन्हें कास्टिंग वस्तु को करके अनाम प्रकार लौट सकते हैं, लेकिन ऐसा कम ही उपयोगी है। हालांकि यदि आप इसे एक वेबएपी नियंत्रक को त्वरित और (ऐसा नहीं) गंदे डीटीओ के रूप में कहने से वापस कर रहे हैं तो मुझे लगता है कि यह बिल्कुल ठीक है। हालांकि यह केवल JSON के साथ काम करता है।XML स्कीमा या कुछ और के बारे में शिकायत करेंगे, लेकिन आजकल हर कोई वैसे भी JSON का उपयोग :)

public static List<Object> GetMembersItems(string ProjectGuid) 
{ 
    using (PMEntities context = new PMEntities("name=PMEntities")) 
    { 
     var items = context.Knowledge_Project_Members.Include("Knowledge_Project").Include("Profile_Information") 
        .Where(p => p.Knowledge_Project.Guid == ProjectGuid) 
        .Select(row => new { IdMember = row.IdMember, UserName = row.Profile_Information.UserName }); 

     return items 
       .ToList() // this is only needed to make EF happy otherwise it complains about the cast 
       .Cast<Object>() 
       .ToList(); 
    } 
} 
संबंधित मुद्दे