2014-10-08 86 views
0

我有一个包含电话号码字符串的对象列表,我想创建一个查询来查找包含任何数字的对象列表。包含字符串值的列表项目

这里是模型:

public class ReportViewModel 
    { 
     public int QueueReportId { get; set; } 
     public string Message { get; set; } 
     public string PhoneNumber { get; set; } 
     public bool Sent { get; set; } 
     public DateTime Day { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public DateTime SentDate { get; set; } 
    } 

我送ReportViewModel的名单来看,有没有办法排序正在发送到浏览者的电话号码,如果电话号码是列表不完全匹配?

例如,我想在列表中搜索具有包含区号513的public string PhoneNumber { get; set; }

我知道如何寻找项目与完全相同的任何地方的电话号码的对象,但不是这样的。

任何帮助,将不胜感激。

+1

你熟悉'string.Contains()'方法..吗? – MethodMan 2014-10-08 15:49:44

回答

1

你可以使用Any()方法并传递一个表达式来检查它与Contains字串的方式PhoneNumber字符串属性,样品:

// get your list 
List<ReportViewModel> reports = GetReports(); 

string areaCode = "513"; 

// check if any object has a phone value in any part of string 
if (reports.Any(r => r.PhoneNumber.Contains(areaCode))) 
{ 
    // contains the phone number 
} 
+0

谢谢!我不得不做一些修改,使其适合我的代码,但这是我所需要的。所有其他答案也是正确的!但我需要选择一个更接近我需求的那个。 – 2014-10-08 16:21:02

1

听起来像是你想使用LINQ的Where

List<ReportViewModel> reports = //.... 

foreach(var report in reports.Where(r => r.PhoneNumber.Contains("513")) 
{ 
    //do something for each report 
} 
+0

这也适用,我只需要在foreach内建立一个新列表 – 2014-10-08 16:21:49

1

你的意思是这样的:

List<string> areaCode= new List<string>() { "somecode123", "somecode321", "somecode456", }; 

而您希望在模块化的“ReportViewModel”上找到来自areaCode列表的任何项目的匹配项。

如果是,那么这应该工作:

var records = new List<ReportViewModel>; 

var results = records.Where(q => areaCode.Any(t => q.PhoneNumber.Conatins(t))); 

这应该可以帮助,请配合支架。

+0

谢谢,这个也可以! – 2014-10-08 16:21:24

+0

@RiquelmyMelara:如果它有帮助,您可能会将其标记为答案。 – Vishal 2014-10-08 16:21:57

0

如果我没有正确回答您的问题is there a way to sort that list that is being sent to the view by phone number if the phone number is not an exact match?以下是如何在列表中对电话号码进行排序时如何排序列表。

public ActionResult Index() 
{ 
    .... 
    var reportsvm = GetReports(); 
    if (!reportsvm.Any(x => x.PhoneNumber.Contains("513"))) 
    { 
     reportsvm = reportsvm.OrderBy(x => x.PhoneNumber).ToList(); 
     // reportsvm = reportsvm.OrderByDescending(x => x.PhoneNumber).ToList(); // if you want in descending order 
    } 

    return View(reportsvm); 
} 
相关问题