日期:2014-05-20 浏览次数:20989 次
public class Student { public String ID { get; set; } public String StuName { get; set; } } public class Grade { public String ID { get; set; } public String GrideName { get; set; } } //测试数据 List<Student> tempStuList = new List<Student>() { new Student(){ ID="001001", StuName="a"}, new Student(){ ID="002001", StuName="b"}, new Student(){ ID="002001", StuName="c"}, new Student(){ ID="003001", StuName="d"}, new Student(){ ID="001001", StuName="e"}, }; List<Grade> tempGradeList = new List<Grade>() { new Grade(){ ID="001", GrideName = "g1"}, new Grade(){ ID="002", GrideName = "g2"}, new Grade(){ ID="003", GrideName = "g3"}, };
var a = from stu in tempStuList join grade in tempGradeList on stu.ID.Substring(0, 3) equals grade.ID into tempGradeTable from tempItem in tempGradeTable select new { StuID = stu.ID, StuName = stu.StuName, GradeName = tempItem == null ? "" : tempItem.GrideName };
class GradeComparer : IEqualityComparer<string> { public bool Equals(string b1, string b2) { string stuId = b1.Length < b2.Length ? b2 : b1; string gradeId = b1.Length < b2.Length ? b1 : b2; return stuId.StartsWith(gradeId); } public int GetHashCode(string bx) { return 1; //返回同样的值,在Equals中进行真正的比较。可能效率会稍差。如果GetHashCode返回不同的值,Equals不会被调用。 } } GradeComparer gradeComparer = new GradeComparer(); var query = tempStuList.Join(tempGradeList, s => s.ID, g => g.ID, (s, g) => new { ID = s.ID, Name = s.StuName, GID = g.ID, GName = g.GrideName}, gradeComparer); foreach (var obj in query) { Console.WriteLine(obj.ID, obj.Name, obj.GID, obj.GName); }
------解决方案--------------------
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { public class Student { public String ID { get; set; } public String StuName { get; set; } } public class Grade { public String ID { get; set; } public String GrideName { get; set; } } static void Main(string[] args) { List<Student> tempStuList = new List<Student>() { new Student(){ ID="001001", StuName="a"}, new Student(){ ID="002001", StuName="b"}, new Student(){ ID="002001", StuName="c"}, new Student(){ ID="003001", StuName="d"}, new Student(){ ID="003001", StuName="e"}, }; List<Grade> tempGradeList = new List<Grade>() { new Grade(){ ID="001", GrideName = "g1"}, new Grade(){ ID="002", GrideName = "g2"}, new Grade(){ ID="003", GrideName = "g3"}, }; var a = from stu in tempStuList select new { StuID = stu.ID, StuName = stu.StuName, GradeName = (tempGradeList.Where(x => stu.ID.IndexOf(x.ID) == 0).Count() > 0 ? tempGradeList.Where(x => stu.ID.IndexOf(x.ID) == 0).First().GrideName : "") }; a.ToList().ForEach(x => Console.WriteLine(x)); } } }