使用Linq连接2个表以作为列表返回

时间:2018-10-21 16:02:02

标签: c# asp.net-mvc linq

这是我的WebGrid代码:

@grid.Table(
            tableStyle: "table table-responsive table-bordered",
            columns: grid.Columns(
                grid.Column(format:@<text> <input type="checkbox" name="check[]" code="@item.SubjectName"  id="Check_@item.SubjectCode" value="Check_@item.Schedule"  /></text>, header: "Check"),
                grid.Column(columnName: "SubjectCode", header: "SubjectCode"),
                grid.Column(columnName: "SubjectName", header: "SubjectName"),
                grid.Column(columnName: "DescriptiveTitle", header: "DescriptiveTitle"),
                grid.Column(columnName: "TotalUnits", header: "Units"),
                grid.Column(columnName: "Schedule", header: "Schedule"),
                grid.Column(columnName: "Instructor", header: "Instructor"),
                grid.Column(columnName: "Room", header: "Room")
            )

        )

这是我的控制器上的内容:

using (dc)
        {
            var v = (from a in dc.Subjects
                     from b
                     in dc.Curricula
                          .Where(o => a.SubjectCode == o.CourseCode)
                          .DefaultIfEmpty()
                     where
                            a.SubjectCode.Contains(search) ||
                            a.SubjectName.Contains(search) ||
                            a.Curriculum.DescriptiveTitle.Contains(search) ||
                            a.Schedule.Contains(search) ||
                            a.Instructor.Contains(search) ||
                            a.Room.Contains(search)
                     select new { Subject = a, Curriculum = b}
                     );

            totalRecord = v.Count();
            v = v.OrderBy(x => x.Curriculum.Year).ThenBy(x => x.Curriculum.Sem);
            return v.ToList();
        }

我对在webgrid中调用的外部数据(“ DescriptiveTitle”,“ TotalUnits”)有疑问。我尝试了其他找到的建议代码,但仍然无法正常工作。

我尝试使用linq联接2表,但该行:

return v.ToList();

有误。我感谢有人能帮助我。

CS0029 Cannot implicitly convert type 'System.Collections.Generic.List<<anonymous type: UESLProject.Subject Subject, UESLProject.Curriculum Curriculum>>' to 'System.Collections.Generic.List<UESLProject.Subject>' UESLProject C:\Users\jerome agda\documents\visual studio 2015\Projects\UESLProject\UESLProject\Controllers\AccountController.cs 162 Active

1 个答案:

答案 0 :(得分:1)

问题不是return语句本身,而是您的方法要返回的实际类型为UESLProject.Subject,而您返回的是匿名类型列表。如果您需要返回同时包含SubjectCurriculum的对象列表,则需要更改方法的签名并制作一个单独的类来包装这两个对象(除非您希望使用键值配对集合或Tuple

这是一个简短的示例:

class Wrapper
{
    public Subject Subject { get; set; }
    public Curriculum Curriculum { get; set; }
}

List<Wrapper> YourMethodName(...)
{
    ...
        {
            var v = (from a in dc.Subjects
                     from b
                     in dc.Curricula
                          .Where(o => a.SubjectCode == o.CourseCode)
                          .DefaultIfEmpty()
                     where
                            a.SubjectCode.Contains(search) ||
                            a.SubjectName.Contains(search) ||
                            a.Curriculum.DescriptiveTitle.Contains(search) ||
                            a.Schedule.Contains(search) ||
                            a.Instructor.Contains(search) ||
                            a.Room.Contains(search)
                     select new Wrapper { Subject = a, Curriculum = b});

            totalRecord = v.Count();
            v = v.OrderBy(x => x.Curriculum.Year).ThenBy(x => x.Curriculum.Sem);
            return v.ToList();
}