如何获取数据表和数据库的强类型linq查询
本文关键字:数据库 强类型 linq 查询 数据表 何获取 获取 | 更新日期: 2023-09-27 17:49:31
我见过与我的问题非常相似的其他解决方案,但不知何故它不适合我。
我有一个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);
我建议使用命名自定义类型,而不是匿名类型。如果您使用的是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>
,您可以在视图中使用。希望这将解决您的问题,据我所知,是缺乏从视图访问查询结果的能力。