C# 从匿名Linq查询填充WinForms DataGridView

C# 从匿名Linq查询填充WinForms DataGridView,c#,winforms,linq,linq-to-sql,datagridview,C#,Winforms,Linq,Linq To Sql,Datagridview,//从我的表格 BindingSource bs = new BindingSource(); private void fillStudentGrid() { bs.DataSource = Admin.GetStudents(); dgViewStudents.DataSource = bs; } //来自管理类 public static List<Student> GetStudents() { DojoDBDataContext conn

//从我的表格

BindingSource bs = new BindingSource();

private void fillStudentGrid()
{
     bs.DataSource = Admin.GetStudents();
     dgViewStudents.DataSource = bs;
}
//来自管理类

public static List<Student> GetStudents()

{
    DojoDBDataContext conn = new DojoDBDataContext();

    var query =
        (from s in conn.Students
         select new Student
         {
             ID = s.ID,
             FirstName = s.FirstName,
             LastName = s.LastName,
             Belt = s.Belt
         }).ToList();

    return query;
}
publicstaticlist GetStudents()
{
DojoDBDataContext conn=新的DojoDBDataContext();
变量查询=
(来自康涅狄格州s的学生)
选择新学生
{
ID=s.ID,
FirstName=s.FirstName,
LastName=s.LastName,
皮带=s.皮带
}).ToList();
返回查询;
}
我试图在Winforms中填充datagridview控件,我只需要其中的几个值。代码进行编译,但引发运行时错误:

不允许在查询中显式构造实体类型“DojoManagement.Student”


有没有办法让它以这种方式工作?

只需返回匿名类型的对象列表:

public static List<object> GetStudents()
{
    DojoDBDataContext conn = new DojoDBDataContext();

    var query =
        (from s in conn.Students
         select new
         {
             ID = s.ID,
             FirstName = s.FirstName,
             LastName = s.LastName,
             Belt = s.Belt
         }).Cast<object>().ToList();

    return query;
}
publicstaticlist GetStudents()
{
DojoDBDataContext conn=新的DojoDBDataContext();
变量查询=
(来自康涅狄格州s的学生)
选择新的
{
ID=s.ID,
FirstName=s.FirstName,
LastName=s.LastName,
皮带=s.皮带
}).Cast().ToList();
返回查询;
}

您已经有了一个
IEnumerable
实例,由于上述原因,您无法从查询中投影实体)

您也不需要创建绑定到此数据源的列表-通过将其更改为以下内容,可以大大简化您的方法:

public static IEnumerable<Student> GetStudents()
{
    return new DojoDBDataContext().Students;
}

有一次,我四处寻找在Gridview上显示结果的解决方案。 我遇到的问题是,我忘记在Winform上将datagrid的属性:“Data Source”设置为None

这是使用linq显示gridview的简单解决方案(仅示例代码)


我正在投影一个新的学生实例,因为。。。我真的不知道我在做什么(显然)。我可以很容易地从所有学生那里获得所有信息,但我只需要几个字段,并且在运行时填充datagrid视图,因为它是只读的。太好了,这很有效!我忍不住想,还有比强制转换更好的方法。好吧,你不能返回匿名类型的列表,不能将a
列表分配给对象列表。。。所以你必须投。无论如何,最好是从GetStudents返回真实的Student对象,并仅在分配数据源之前执行投影。我们正在查看所有高级绑定相关解决方案,而忽略了最简单的解决方案。这个为我解决了。谢谢
public static IEnumerable<Object> GetStudents()
{
    DojoDBDataContext conn = new DojoDBDataContext();

    return conn.Students
               .Select(s => new {
                   ID = s.ID,
                   FirstName = s.FirstName,
                   LastName = s.LastName,
                   Belt = s.Belt 
               });
}
public static IEnumerable<Object> GetStudents()
{
    DojoDBDataContext conn = new DojoDBDataContext();

    return conn.Students
               .Select(s => new {
                   ID = s.ID,
                   FirstName = s.FirstName,
                   LastName = s.LastName,
                   Belt = s.Belt 
               }).Cast<Object>();
}
DataGrid dataGrid1 = new DataGrid();

var custQuery =
    from cust in db.Customers
    select cust;

dataGrid1.DataSource = custQuery;