兩者相同之處在於結構內都有學生的姓名
所以我們用學生的姓名來判斷是否相同
如果相同則透過new方法來宣告為新的結構以及加入該值
using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { /// <summary> /// Logger /// </summary> private static readonly ILog LOG = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name); struct Student { public string name; } struct Score { public string name; public int math; public int ch; public int en; } List<Student> listS = new List<Student>(); List<Score> listC = new List<Score>(); public Form1() { InitializeComponent(); //初始化Log4Net log4net.Config.XmlConfigurator.Configure(); listS.Add(new Student() { name = "王曉" }); listS.Add(new Student() { name = "小名" }); listS.Add(new Student() { name = "鵜鶘" }); listC.Add(new Score() { name = "王曉", math = 70, ch = 50, en = 100 }); listC.Add(new Score() { name = "小名", math = 50, ch = 30, en = 1 }); var listT = from s in listS from c in listC where s.name.Equals(c.name) select new { s.name, c.math, c.en, c.ch, score = (c.math + c.en + c.ch / 3) }; foreach (var t in listT) { LOG.Info(String.Format("{0} avg:{1}", t.name, t.score)); } } } }
執行結果: