使用另一个值列表过滤 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();
我想使用 linq
将 mHistory
值过滤为 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;
我有一个客户历史数据列表,其中也有 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();
我想使用 linq
将 mHistory
值过滤为 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;