2015-03-17 5 views
0

У меня есть этот список, дата сохранена в виде строки. Например, как я могу выбрать Даты между «93/01/01» и «93/01/10» с LINQ?Выбрать из списка между двумя элементами String

code   date 
1   "93/01/01" 
2   "93/01/02" 
3   "93/01/03" 
4   "93/01/04" 
5   "93/01/05" 
6   "93/01/06" 
7   "93/01/07" 
8   "93/01/08" 
9   "93/01/09" 
10   "93/01/10" 
11   "93/01/11" 
12   "93/01/12" 
+1

Какой тип вашего «списка»? – cubrr

+0

Если это yy/mm/dd, вы можете просто сравнить строки. Ваша проблема - это, конечно, даты после 2000/01/01. Однако вы подходите к проблеме, которую вы должны решить, если 93 93AD или 3093AD – Ewan

+0

Значения даты должны (почти) всегда храниться как типы DateTime, особенно если вы собираетесь их сравнить. В качестве строки они больше не являются датами, а просто текстом, который отличается по-разному. Если они имеют формат «yy/dd/mm», это означает, что «93/30/03» будет сравниваться как «93/01/12», – Plutonix

ответ

1

Для запроса, который будет возвращать эти результаты, var asdf = liststuff.Where( x => x.date >= Convert.ToDateTime("1993/01/01") && x.date <= Convert.ToDateTime("1993/01/10"));

Для получения списка, который выполняется и содержит те результаты, var asdf = liststuff.Where( x => x.date >= Convert.ToDateTime("1993/01/01") && x.date <= Convert.ToDateTime("1993/01/10")).ToList();

предостерегающие комментарии все правильно, но это будет получить вы, что вы просили.

0
public struct Data 
    { 
     public Data(string keyValue, string strValue) 
     { 
      key = keyValue; 
      date = Convert.ToDateTime(strValue); 
     } 

     public string key { get; private set; } 
     public DateTime date { get; private set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var test = new List<Data>(); 
      test.Add(new Data("1", "93/01/01")); 
      test.Add(new Data("2", "93/01/02")); 
      test.Add(new Data("3", "93/01/03")); 
      test.Add(new Data("4", "93/01/04")); 
      test.Add(new Data("5", "93/01/05")); 
      test.Add(new Data("6", "93/01/06")); 
      test.Add(new Data("7", "93/01/07")); 

      var asdf = test.Where(x => x.date >= Convert.ToDateTime("1993/01/01") && x.date <= Convert.ToDateTime("1993/01/10")); 

     var asdff= from t in test 
        where t.date >= Convert.ToDateTime("1993/01/01") && t.date <= Convert.ToDateTime("1993/01/10") 
        select t; 

     } 
    } 

Просто для добавления чего-то, как и раньше, потому что примерить на строку < = с датой не будет работать.

Смежные вопросы