【问题标题】:how do I join two lists using linq or lambda expressions如何使用 linq 或 lambda 表达式加入两个列表
【发布时间】:2011-06-06 14:37:53
【问题描述】:

我有两个列表 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; }
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    使用扩展方法而不是 linq 查询语法的方法如下:

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

    【讨论】:

    • +1 用于 linq 扩展方法。我发现这个版本在用 C# 读写时更流畅。
    • 如果表用两个属性(列)连接会怎样
    • 哇..你为我节省了很多个月的时间。谢谢!
    • @Peter Isaac 例如,您只需使用wo => new { wo.Id1, wo.Id2 }
    【解决方案2】:

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

    var query = from order in workOrders
                join plan in plans
                     on order.WorkOrderNumber equals plan.WorkOrderNumber
                select new
                {
                    order.WorkOrderNumber,
                    order.Description,
                    plan.ScheduledDate
                };
    

    【讨论】:

    • Jon Skeet...我在 30 秒前发布了这个...您已经有了答案!
    【解决方案3】:
     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();
    

    【讨论】:

    • 请提供对此代码的一些解释(正确缩进也很好)以及它回答问题的原因。
    猜你喜欢
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多