LINQ join“全选”仅返回第二个表的列

问题描述 投票:0回答:2

我需要一个对象列表,其属性将是列的名称。

这是我的方法:

var list = (from student in context.Student
        join school in context.School
        on student.idSchool equals school.idSchool
        into allcolumns
        from entry in allcolumns
        select entry).ToList();

但列表恰好只是

School
的列表。我怎样才能实现我的目标?谢谢你。

c# linq
2个回答
2
投票

Select Linq 表达式返回

IEnumerable<T>
T
可以是匿名类型。在你的情况下,如果你只想要某些列,你需要表达哪些列。

var mylist = 
    from student in context.Student
    join school in context.School on student.idSchool equals school.idSchool
    select new 
    {
        student.idSchool, // if you want specific name - define >> SchoolId = student.idSchool
        student.Property1,
        student.Property2,
        student.Property3,
        school.Property1,
        school.Property2,
        school.Property3,  
    };

现在您已经有了匿名类型的 Enumerable,您可以随时根据需要调用

ToList/ToArray
。请记住,由于“延迟执行”的概念

,请确保仅调用它一次并重用变量

1
投票

我正在检查你的linq,我想你可以这样改变它:

var mylist = from student in context.Student
    join school in context.School
    on student.idSchool equals school.idSchool
    select new 
    {
      Stud = student,
      Scho = school
    };

变量列表将是 Enumerable T、匿名类型

您可以通过以下方式检查结果:

foreach(var item in mylist)
{
    Console.Writeline($"{item.Stud.YourFieldName} | {item.Scho.YourFieldName}");
}
© www.soinside.com 2019 - 2024. All rights reserved.