使用另一个值列表过滤 linq

Filtering a linq using another list of values

我有一个客户历史数据列表,其中也有 phone 个数字。 我需要根据我的 phone 号码列表过滤历史数据,这是我的代码

历史class

 public class MessengerHistory
    {
        public Int64 ClientId;
        public string FirstName;
        public string LastName;
        public string ChartNumber;
        public string PhoneNumber;
        public string PetName;
        public string Messagetext;
    }

List<string> phonenumber = List<string>{ "12345","45678","35487"}

我从 api 调用

获取消息历史列表
var messageOverview = messengerAppWorkflow.GetMessageOverview();
    List<MessageHistroy> mHistory = messageOverview.messages.Select(item => item.clientPhone).ToList();

我想使用 linqmHistory 值过滤为 return 匹配我的 phonenumber 列表的历史值。

你可以加入他们:

var query = from msg in messengerAppWorkflow.GetMessageHistory()
            join phone in phonenumber
            on msg.PhoneNumber equals phone
            select msg;
List<MessageHistroy> mHistory = query.ToList();

另一种 less efficient 方法是使用 Enumerable.Where + Contains:

List<MessengerHistory> mHistory = messengerAppWorkflow.GetMessageHistory()
    .Where(msg => phonenumber.Contains(msg.PhoneNumber))
    .ToList():

//这是你已有的

        List<MessengerHistory> reqMessengerHistoryList = new List<MessengerHistory>();

        List<string> phoneNumberList = new List<string> { "12345", "45678", "35487" };

//假设messengerHistoryList是你从api得到的列表:

        List<MessengerHistory> messengerHistoryList = new List<MessengerHistory>();
        MessengerHistory messengerHistory1 = new MessengerHistory
        {
            ClientId = 123,
            FirstName = "Rahul",
            LastName = "Manhotra",
            ChartNumber = "abc",
            PhoneNumber = "12345",
            PetName = "pqr",
            Messagetext = "This is simple"
        };
        MessengerHistory messengerHistory2 = new MessengerHistory
        {
            ClientId = 123,
            FirstName = "Peter",
            LastName = "stuv",
            ChartNumber = "abc",
            PhoneNumber = "34534",
            PetName = "stu",
            Messagetext = "This is hard"
        };
        messengerHistoryList.Add(messengerHistory1);
        messengerHistoryList.Add(messengerHistory2);

//这是你需要做的:

        foreach (var item in messengerHistoryList)
        {
            if (phoneNumberList.Contains(item.PhoneNumber))
            {
                requiredMessengerHistoryList.Add(item);
            }
        }
       return requiredMessengerHistoryList;