2014-10-08 3 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()' Method ..? – MethodMan

ответ

1

Вы можете использовать метод Any() и передать выражение, чтобы проверить его в PhoneNumber свойстве строки с помощью метода Contains строки, для образца:

// 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

Спасибо! Я должен был внести некоторые изменения, чтобы он соответствовал моему коду, но это то, что мне нужно. Все остальные ответы тоже правильные! но мне нужно было выбрать тот, который был ближе к моим потребностям. –

1

Похоже, вы хотите использовать LINQ-х Where:

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

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

Это тоже работает, мне просто нужно построить новый список внутри foreach –

1

ли вы имеете в виду что-то вроде:

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

И вы хотите найти соответствие любого элемента из списка areaCode на модульном «ReportViewModel».

Если да, то это должно работать:

var records = new List<ReportViewModel>; 

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

Это должно помочь, пожалуйста сопрягать кронштейн.

+0

Спасибо, это тоже работает! –

+0

@RiquelmyMelara: Вы могли бы отметить это как ответ, если бы это помогло. – Vishal

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); 
} 
Смежные вопросы