2012-02-19 9 views
6

मैं निम्नलिखित LINQ क्वेरी ...LINQ क्वेरी गुमनाम प्रकार POCO वस्तु को नहीं बदला जा सकता

public List<UserProject> GetProjectsByUser(int userid) 
{ 
    //var query = 
    return (
       from p in this.Entities.Projects 
       join c in this.Entities.Categories 
        on p.CategoryId equals c.CategoryId 
       join u in this.Entities.Users 
        on p.UserId equals u.UserId 
       where p.UserId == 11 
       select 
        new 
         { 
          p.ProjectId, 
          u.UserName, 
          p.UserId, 
          ProjectName = p.Name, 
          ProjectDescription = p.Description, 
          CategoryName = c.Name 
         } 
       into pcup 
       join m in this.Entities.Messages 
        on 
        pcup.ProjectId equals m.ProjectId 
        into pm 
       select 
        new { 
         pcup.ProjectId, 
         pcup.UserId, 
         pcup.ProjectName, 
         pcup.ProjectDescription, 
         Messages = pm 
        } 
      ).ToList<UserProject>(); 
} 

और मैं निम्न दृश्य उद्देश्य यह है कि मैं पॉप्युलेट करने के लिए कोशिश कर रहा हूँ ....

public class UserProject 
{ 
    UserProject() 
    { 
     Messages = new EnumerableQuery<Message>(); 
    } 

    public int ProjectId; 
    public int UserId; 
    public string ProjectName; 
    public string ProjectDescription; 
    public IEnumerable<Message> Messages; 
    //public string UserName; 
    //public string CategoryName; 
    //public int CategoryId; 
} 

किसी प्रोजेक्ट में 0 या संदेश हो सकते हैं। मेरा लक्ष्य यहां मेरे एमवीसी व्यू में UserProject ऑब्जेक्ट्स की एक सूची पास करना है, प्रत्येक UserProject ऑब्जेक्ट में संदेशों का संग्रह हो सकता है। इस प्रकार

त्रुटि 1 उदाहरण तर्क त्रुटि मैं मिलता है: 'System.Linq.IQueryable<AnonymousType#1>' से करने के लिए 'System.Collections.Generic.IEnumerable<Riebro.Services.UserProject>'

त्रुटि परिवर्तित नहीं कर सकते 2 'System.Linq.IQueryable<AnonymousType#1>' 'ToList' के लिए एक परिभाषा और सबसे अच्छा विस्तार शामिल नहीं है विधि अधिभार 'System.Linq.Enumerable.ToList<TSource>(System.Collections.Generic.IEnumerable<TSource>)' में कुछ ऐसी अमान्य तर्क हैं

वर्तमान में संदेशों इकाई परियोजनाओं के लिए एक नेविगेशन संपत्ति नहीं है ... यह चाहिए ... मुझे लगता है कि यह परिवर्तन बाद में जोड़ देगा ... लेकिन इस समय मैं सिर्फ के लिए की जरूरत है काम पर एपी।

संपादित

यह खड़ा के रूप में अब LINQ क्वेरी इस तरह दिखता है ...

return (
       from p in this.Entities.Projects 
       join c in this.Entities.Categories 
        on p.CategoryId equals c.CategoryId 
       join u in this.Entities.Users 
        on p.UserId equals u.UserId 
       where p.UserId == userid 
       select 
        new 
         { 
          p.ProjectId, 
          u.UserName, 
          p.UserId, 
          p.Name, 
          p.Description, 
          //CategoryName = c.Name 
         } 
        into pcup 
        join m in this.Entities.Messages 
         on 
         pcup.ProjectId equals m.ProjectId 
         into pm 
        select 
         new UserProject { 
          ProjectId = pcup.ProjectId, 
          UserId = pcup.UserId, 
          ProjectName = pcup.Name, 
          ProjectDescription = pcup.Description, 
          Messages = pm 
         } 
      ).ToList<UserProject>(); 

और देखने वर्ग इस तरह दिखता है ...

public class UserProject 
{ 
    public UserProject() 
    { 
     Messages = new List<Message>(); 
    } 

    public int ProjectId; 
    public string UserName; 
    public int UserId; 
    public string ProjectName; 
    public string ProjectDescription; 
    public List<Message> Messages; 
    //public string CategoryName; 
    //public int CategoryId; 
} 

और अब मैं कर रहा हूँ निम्नलिखित त्रुटि प्राप्त हो रही है ...

त्रुटि 1 सी annot implicitly प्रकार 'System.Collections.Generic.IEnumerable<Riebro.Message>' से 'System.Collections.Generic.List<Riebro.Message>' में परिवर्तित करें। एक स्पष्ट रूपांतरण मौजूद है (क्या आप एक कास्ट गायब हैं?)

उत्तर

15

आपको अपने चयन कथन में किसी अज्ञात ऑब्जेक्ट के बजाय UserProject उदाहरण बनाना चाहिए।

select new UserProject 
      { 
       ProjectId = pcup.ProjectId, 
       UserID = pcup.UserId, 
       ProjectName = pcup.ProjectName, 
       ProjectDescription = pcup.ProjectDescription, 
       Messages = pm 
      } 
+4

+1 इसके अलावा, 'उपयोगकर्ताप्रोजेक्ट() 'कन्स्ट्रक्टर, जो' संदेश 'शुरू करता है, को सार्वजनिक किया जाना चाहिए, अन्यथा यह पहुंच योग्य नहीं होगा। –

+0

धन्यवाद ... जो प्रारंभ में काम करता है ... लेकिन अब मैं फंस गया हूं ... त्रुटि अंतर्निहित रूप से प्रकार 'System.Collections.Generic.IEnumerable ' को 'System.Collections.Generic' में परिवर्तित नहीं कर सकता। सूची '। एक स्पष्ट रूपांतरण मौजूद है (क्या आप एक कास्ट गायब हैं?) –

+2

अपनी क्वेरी के अंत में ToList() का उपयोग करें –