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 に答える