Linq加入两个列表并使用内部列表值的值进行过滤

时间:2015-05-05 06:56:58

标签: c# linq

我有一个客户列表,它内部包含电话号码列表,我需要使用linq过滤与另一个电话列表中的客户电话号码匹配的客户列表。

这是我的代码

我的客户对象是

public class Client
{
   public int id;
   public string firstname;
   public string lastname;
   public List<phone> phones;
    //etc.
}

public class phone
{
    public int id;
    public string phoneno;
}

var searchByPhone = new List<string,string>();

searchByPhone.Add("12324344", "message one");
searchByPhone.Add("45646565", "message two");
searchByPhone.Add("56868675", "message three");

//first one is phone number and second is the text message.

我需要的是

我需要通过客户电话列表中的searchByPhone phonenumber列出客户端,并将结果集合并到下面提到的新Clientobject。有什么帮助吗?

public class ClientObject
{
    public int id;
    public string firstname;
    public string lastname;
    public string phonenumber;
    public string message; 
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题:

public class Hello{
public static void main(String args[]){
System.out.println("Hello World");
}
}

注意:您需要公开客户端,客户端对象和电话类的成员,或者最好创建公共属性以获取/设置其值。

这将为您提供ClientObject对象的列表,其中包含来自Client对象的id,名字和姓氏,以及来自searchByPhone元组的appropraite数字和消息。 我认为这就是你所追求的。如果没有,请澄清您的需求,我可以调整答案

答案 1 :(得分:0)

尝试类似:

var data = (from dt in searchByPhone
                    let cl = clientList.Where(z => z.phones.Any(y => y.phoneno.Equals(dt.Item1)))
                    select cl.Select(x => new ClientObject
                                              {
                                                  firstname = x.firstname,
                                                  lastname = x.lastname,
                                                  id = x.id,
                                                  phonenumber = dt.Item1,
                                                  message = dt.Item2
                                              })).Aggregate((a, b) =>
                                              {
                                                  a.ToList().AddRange(b);
                                                  return a;
                                              });