C# Linq Select导致InvalidCastException

C# Linq Select导致InvalidCastException,c#,linq,C#,Linq,返回调用会导致System.InvalidCastException异常。如果删除日期,则不会出现错误 这是课程课: var courses = db.Courses.Select(course => new Model.Course() { Dates = db.Dates .Where(date => date.CourseID == course.ID) .Select(date => date._Date.ToString())

返回调用会导致System.InvalidCastException
异常。如果删除日期,则不会出现错误

这是课程课:

var courses = db.Courses.Select(course => new Model.Course() {
    Dates = db.Dates
        .Where(date => date.CourseID == course.ID)
        .Select(date => date._Date.ToString())
        .ToList()
});

return courses.ToList();
公共课{
公共列表日期{get;set;}
}
VS的屏幕截图:


您没有显示完整的模型,但我认为您应该使用一个
join
连接这两个表,而不是一个
,其中
类似于:

public class Course {
    public List<string> Dates { get; set; }
}
\u Date
列上的
.ToString()
可能导致InvalidCastException。Linq to SQL正在尝试使用SQL中不存在的ToString()将您的
\u日期
转换为字符串。您只需从SQL中获取日期,并将其转换为内存中的字符串

试试这个:

var courses = 
    db.Courses
    .Join(
        db.Dates, 
        c => c.ID, 
        d => d.CourseID, 
        (c, d) => new 
        { 
            Course = c, 
            Dates = d 
        }
    ).ToList();
//从数据库中获取课程及其日期列表。
//将日期放入DateTime列表中,但也可以使用DateTime2。
//请注意,课程将是IQueryable。
var courses=db.courses.Select(courses=>newlist{
日期=数据库日期
.Where(date=>date.CourseID==course.ID)
.Select(date=>date.\u date).ToList()
});
//通过调用IQueryable的ToList()方法从SQL中提取数据。这会将数据作为列表放入内存中。
//使用List.Select()方法,将日期转换为字符串。这将返回一个IEnumerable。
//将生成的IEnumerable转换回列表。
复课
托利斯先生()
.选择(课程=>new Model.课程
{
//在这里,您使用的是.NET Framework的DateTime.ToString()
//因此,您可以使用任何可用的格式选项。
Dates=课程.Dates.Select(日期=>date.ToString()).ToList()
})
.ToList();

在您的课程模型中,日期的类型是什么?消息是否指定了您试图从中或向中转换的内容?这是否使用实体框架?角色是否是其中一个实体的成员?我在问题中包含了更多相关数据。我不知道“角色”是什么意思。
课程
类如何映射到基础表?看起来您正试图将字符串列映射为int。太好了!必须将
.ToList()
添加到两个内部
.Select()
中,但它工作得很好。啊,是的,因为您有一个
列表,而不是
IEnumerable
。对不起,我弄错了。我更新了我的答案。
// Grab from db list of courses and their dates. 
// Put dates in a List of DateTime, but you can also use DateTime2.
// Note that courses will be an IQueryable.
var courses = db.Courses.Select(course => new List<DateTime> {
    Dates = db.Dates
        .Where(date => date.CourseID == course.ID)
        .Select(date => date._Date).ToList()
});

// Extract data from SQL by calling our IQueryable's ToList() of method. This puts the data as a List in memory.
// Using the List.Select() method, convert dates to strings. This will return an IEnumerable.
// Convert the resulting IEnumerable back to a List.
return courses
          .ToList()
          .Select(course => new Model.Course
          {
             // Here, you are using the .NET Framework's DateTime.ToString()
             // So you can use any formatting options available with that.
             Dates = course.Dates.Select(date => date.ToString()).ToList()
          })
          .ToList();