1

我已经看到了与我的问题非常相似的其他解决方案,但不知何故它对我不起作用。

我有一个对数据库的 linq 查询,它连接到一个非强类型的数据表。我需要一个强类型的结果来返回一个视图。

我的尝试看起来像这样

var query = (from t in queryAllTasks
             join tL in table.AsEnumerable() on t.TaskId equals tL.Field<int>("TaskId")
             select new { t.TaskId, Kasten = tL.Field<int>("Box") }).AsEnumerable();

如果感兴趣,这是数据表:

//Create new DataTable.
        DataTable table = new DataTable();

        //Declare DataColumn and DataRow variables
        DataColumn column;
        DataRow row;

        //Create ne DataColumn
        //set DataType
        //ColumnName
        //add to Datatable
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "TaskId";
        table.Columns.Add(column);

        //Dritte Spalte
        column = new DataColumn();
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "Box";
        table.Columns.Add(column);
4

1 回答 1

1

我建议使用命名自定义类型,而不是匿名类型。如果您使用的是new { ... }构造,那么您正在创建匿名类型,这些类型通常不会传递出去或传递到方法中。如果确实将匿名类型从方法中传递出来,则需要将其强制转换为对象或将形式参数设为动态,然后访问其字段,我不建议这样做,尤其是在视图中。我建议将您的查询更改为:

var query = from t in queryAllTasks
             join tL in table.AsEnumerable() on t.TaskId equals tL.Field<int>("TaskId")
             select new MyModel{ TaskId =  t.TaskId, Kasten = tL.Field<int>("Box") };

MyModel被定义为

public class MyModel
{
    public int TaskId { get; set; }
    public int Kasten { get; set; }
}

结果,您将IEnumerable<MyModel>在具有已知内部结构的视图中命名,您可以在视图中使用它。希望这能解决您的问题,据我了解,这是缺乏从视图访问查询结果的能力。

于 2012-12-27T14:54:59.247 回答