![](/img/trans.png)
[英]How to perform a Linq “First” query on a strongly-typed DataTable object?
[英]How to get a strongly typed linq query of a data table and database
我已經看到了與我的問題非常相似的其他解決方案,但是某種程度上它對我不起作用。
我有一個db的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>
,您可以在視圖中使用它。 希望這能解決您的問題,據我所知,這是因為無法從視圖訪問查詢結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.