Соединение 2 таблиц с использованием Linq для возврата в виде списка - PullRequest
0 голосов
/ 21 октября 2018

Вот мой код 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();
        }

У меня проблема спосторонние данные («DescriptiveTitle», «TotalUnits») для вызова в веб-сетке.Я пробовал другие предложенные коды, которые я нашел, но все еще не работал.

Я попытался объединить таблицу 2, используя linq, но строка:

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 голосов
/ 21 октября 2018

Проблема не в самом операторе return, а в фактическом типе, который ваш метод исключает для возврата, который равен UESLProject.Subject, и вы возвращаете список анонимных типов.Если вам нужно вернуть список объектов, которые содержат как Subject, так и Curriculum, то вам нужно будет изменить сигнатуру вашего метода и создать отдельный класс, объединяющий эти два (если вы не хотите использовать значение ключапарная коллекция или 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...