как решить мою проблему преобразования строки в datetime?

#c# #asp.net #asp.net-mvc

#c# #asp.net #asp.net-mvc

Вопрос:

Я хотел перечислить даты в выпадающем списке, но у меня возникла проблема с преобразованием в команде GenreLst.AddRange (GenreQry.Distinct ()); кто-нибудь может помочь? спасибо, я попробовал использовать Convert.ToDateTime(), но не работает.

 public ActionResult Index(string startData)
    {
        var GenreLst = new List<string>();

        var GenreQry = from d in db.Programa
                       orderby d.Data_Registo
                       select d.Data_Registo;
        
        GenreLst.AddRange(GenreQry.Distinct()); //Error string
        ViewBag.startData = new SelectList(GenreLst);

        var datas = from m in db.Programa
                     select m;
        
        if (string.IsNullOrEmpty(startData))
            return View(datas);
        else
        {
            DateTime start = Convert.ToDateTime(startData);
            return View(datas.Where(x => x.Data_Registo == start));
        }
    }
 

моя ошибка

 CS1503:Argument 1: cannot convert from 'System.Linq.lQueryable<DateTime?> to System.Collections.Generic.lEnumerable<string>'
 

Комментарии:

1. Для начала не храните даты в виде строк. Все базы данных имеют типы, связанные с датой, такие как datetime или date

2. Обычно вместе с волнистой красной линией появляется сообщение об ошибке. Это значительно увеличило бы ваши шансы на получение полезного ответа, если бы вы включили это сообщение об ошибке в виде текста в свой вопрос.

3. Что касается ошибки — вы ее не опубликовали. Просто картинка с закорючками. Изображения не могут быть скопированы, скомпилированы и протестированы. Какую фактическую ошибку вы получаете? Возможно, запрос возвращает правильное DateTime ? Почему бы не сохранить его в a List<DateTime> ?

4. Если вы сохраняете Data_Registo как DateTime в базе данных, то вам нужно будет преобразовать эти значения в строку, чтобы иметь возможность добавлять их в свой список строк. GenreLst.AddRange(GenreQry.Distinct().Select(b => b.ToString("yy-MM-dd")));

5. мои данные (Data_Registo) имеют DateTime, но я хочу загрузить их в виде строки

Ответ №1:

Похоже, вы пытаетесь добавить список типов DateTime? к списку типов string , что вызывает ошибку, которую вы видите здесь.

Чтобы решить эту проблему, вы могли бы объявить GenreLst тип List<DateTime?> , такой как:

 var GenreLst = new List<DateTime?>();
 

Что затем позволит вам добавлять GenreQry .

В качестве альтернативы можно было бы объявить GenreLst в качестве результата из GenreQry.Distinct() :

 var GenreLst = GenreQry.Distinct();
 

Комментарии:

1. Да, это работает. иногда кажется, что я просто усложняю простое 🙂 спасибо

Ответ №2:

    public static DateTime? ToNullableDateTime(object dateTime)
    {
        if (dateTime == null)
        {
            return null;
        }
        DateTime tvParsedDate;
        if (DateTime.TryParse(dateTime.ToString(), out tvParsedDate))
        {
            return tvParsedDate;
        }
        return null;
    }
 

Комментарии:

1. Похоже, это не имеет никакого отношения к заданному вопросу (хотя, поскольку вы не удосужились добавить какое-либо объяснение своего кода, мы понятия не имеем, какую логику вы применяете в своем ответе). Вы случайно разместили это в неправильном месте?