簡體   English   中英

如何獲取數據表和數據庫的強類型linq查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM