如何使用linq或lambda表达式连接两个列表

Bra*_*rad 50 c#

我有两个列表List<WorkOrder>,List<PlannedWork>我想加入工作订单号上的两个列表,详情如下.换句话说,我有一份计划工作清单,但我需要知道workOrderNumber工作的描述.

我是linq和lambda表达式的新手,我还没有把头缠在他们身边.

class WorkOrder
{
    public int WorkOrderNumber { get; set; }
    public string WorkDescription { get; set; }
}

class PlannedWork
{
    public int WorkOrderNumber { get; set; }
    public DateTime ScheduledDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Ner*_*ury 80

使用Extention Methods而不是linq查询语法的方法是这样的:

var results = workOrders.Join(plans,
  wo => wo.WorkOrderNumber,
  p => p.WorkOrderNumber,
  (order,plan) => new {order.WorkOrderNumber, order.WorkDescription, plan.ScheduledDate}
);
Run Code Online (Sandbox Code Playgroud)

  • 为linq扩展方法+1.我觉得这个版本在用C#读写时会更好. (9认同)
  • 如果表用两个属性(列)连接怎么办 (2认同)
  • @Peter Isaac你只需使用,例如`wo =&gt; new { wo.Id1, wo.Id2 }`。 (2认同)

Jon*_*eet 79

这听起来像你想要的东西:

var query = from order in workOrders
            join plan in plans
                 on order.WorkOrderNumber equals plan.WorkOrderNumber
            select new
            {
                order.WorkOrderNumber,
                order.Description,
                plan.ScheduledDate
            };
Run Code Online (Sandbox Code Playgroud)

  • 而且他知道他的妻子在想什么. (23认同)
  • Jon Skeet ...我在30秒前发布了这个...你已经有了答案! (15认同)

小智 5

 public class State
        {
            public int SID { get; set; }
            public string SName { get; set; }
            public string SCode { get; set; }
            public string SAbbrevation { get; set; }
        }

        public class Country
        {
            public int CID { get; set; }
            public string CName { get; set; }
            public string CAbbrevation { get; set; }
        }


 List<State> states = new List<State>()
            {
               new  State{  SID=1,SName="Telangana",SCode="+91",SAbbrevation="TG"},
               new  State{  SID=2,SName="Texas",SCode="512",SAbbrevation="TS"},
            };

            List<Country> coutries = new List<Country>()
            {
               new Country{CID=1,CName="India",CAbbrevation="IND"},
               new Country{CID=2,CName="US of America",CAbbrevation="USA"},
            };

            var res = coutries.Join(states, a => a.CID, b => b.SID, (a, b) => new {a.CName,b.SName}).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 请提供对此代码的一些解释(正确缩进也很好)以及为什么它回答了问题。 (2认同)