2012-04-10 8 views
2
public class LearnerInfo 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 


    public LearnerInfo(string id, string name) 
    { 
     this.Id = id; 
     this.Name = name; 
    } 
} 


public class LearnerCourse 
{ 
    public string Id { get; set; } 
    public string ExpiredCount { get; set; } 
    public string Soonduecount { get; set; } 
    public string Currentmonthcount { get; set; } 
    public string Currentmonthplus1count { get; set; } 
    public string Currentmonthplus2count { get; set; } 
    public string Currentmonthplus3count { get; set; } 
    public string Currentmonthplus4count { get; set; } 
    public string Currentmonthplus5count { get; set; } 
    public string Subtotal { get; set; } 


    public LearnerCourse(string id, string exp, string soonDue, string current, string plus1, string plus2, 
     string plus3, string plus4, string plus5) 
    { 
     this.Id = id; 
     this.ExpiredCount = exp; 
     this.Soonduecount = soonDue; 
     this.Currentmonthcount = current; 
     this.Currentmonthplus1count = plus1; 
     this.Currentmonthplus2count = plus2; 
     this.Currentmonthplus3count = plus3; 
     this.Currentmonthplus4count = plus4; 
     this.Currentmonthplus5count = plus5; 
    } 


    public LearnerCourse() 
    { } 
} 

public class InfoList : IEnumerable<CombinedInfo> 
{ 

    private List<CombinedInfo> _infoList = new List<CombinedInfo>(); 

    public InfoList() 
    { 
     _infoList = new List<CombinedInfo>(); 
    } 


    public void Add(CombinedInfo i) 
    { 
     _infoList.Add(i); 
    } 


    public IEnumerator<CombinedInfo> GetEnumerator() 
    { 
     return _infoList.GetEnumerator(); 
    } 


    //IEnumerable Members 
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     throw new NotImplementedException(); 
    } 
} 


public class CombinedInfo 
{ 
    public string Id { get; set; } 
    public string ExpiredCount { get; set; } 
    public string Soonduecount { get; set; } 
    public string Currentmonthcount { get; set; } 
    public string Currentmonthplus1count { get; set; } 
    public string Currentmonthplus2count { get; set; } 
    public string Currentmonthplus3count { get; set; } 
    public string Currentmonthplus4count { get; set; } 
    public string Currentmonthplus5count { get; set; } 
    public string Name { get; set; } 
} 


    static void Main(string[] args) 
    { 
     LearnerCourse lc1 = new LearnerCourse("777", "1", "1", "0", "1", "0", "0", "0", "0"); 
     LearnerCourse lc2 = new LearnerCourse("589", "1", "0", "0", "0", "0", "0", "0", "0"); 

     LearnerInfo li1 = new LearnerInfo("777", "moe"); 
     LearnerInfo li2 = new LearnerInfo("589", "larry"); 

     LearnerCourse[] lCourses = new LearnerCourse[2]; 
     lCourses[0] = lc1; 
     lCourses[1] = lc2; 

     LearnerInfo[] linfos = new LearnerInfo[2]; 
     linfos[0] = li1; 
     linfos[1] = li2; 


     //test linq join for object array 
     var myJoin = (from c in lCourses 
        join i in linfos on c.Id equals i.Id 
        select new { 
         c.ExpiredCount, 
         c.Soonduecount, 
         c.Currentmonthcount, 
         c.Currentmonthplus1count, 
         c.Currentmonthplus2count, 
         c.Currentmonthplus3count, 
         c.Currentmonthplus4count, 
         c.Currentmonthplus5count, 
         c.Subtotal, 
         i.Id, 
         i.Name 
        }); 


     foreach (CombinedInfo o in l) 
     { 
      //loop through and can add to list of type CombinedInfo 
     } 
} 

foreachループを実行する代わりに、linqクエリから結果セットを取得してListを返すだけの問題があります。linq結果セットをカスタムタイプとして返​​すにはどうすればいいですか?

提案はありますか?

答えて

4

2つのこと:カスタムクラスへ

a)のプロジェクトではなく、匿名型。あなたの場合はすでにCombinedInfoが定義されています - それを使用してください。

b)の実行を強制し、List<T>

var list = (from c in lCourses 
      join i in linfos on c.Id equals i.Id 
      select new CombinedInfo() { 
       ExpiredCount = c.ExpiredCount, 
       Soonduecount = c.Soonduecount, 
       Currentmonthcount = c.Currentmonthcount, 
       Currentmonthplus1count = c.Currentmonthplus1count, 
       Currentmonthplus2count = c.Currentmonthplus2count, 
       Currentmonthplus3count = c.Currentmonthplus3count, 
       Currentmonthplus4count = c.Currentmonthplus4count, 
       Currentmonthplus5count = c.Currentmonthplus5count, 
       Subtotal = c.Subtotal, 
       Id = i.Id, 
       Name = i.Name 
      }).ToList(); 
+0

完璧に結果を変換するにはToList()を使用して、私は物事のすべての種類をしようとしていたし、私はこのソリューションをしようとしたとき、私は、PropertyName意味=でからのことに取り残さあなたが持っている新しいものを選んでください。ご協力ありがとうございました! – Anthony

関連する問題