3

こんにちは、私は仕事をしなければならない恐ろしいデータベースを持っています.linq to sqlは、データを取得するためのオプションです。ユーザーの選択に基づいて別のテーブル名をスローして関数を再利用しようとしている人がいますが、私の知る限り、DataContext クエリで TEntity または Table<> を変更する方法はありません。

これが私の現在のコードです。

public void GetRecordsByTableName(string table_name){

string sql = "Select * from " + table_name;
var records = dataContext.ExecuteQuery</*Suppossed Table Name*/>(sql);

ViewData["recordsByTableName"] = records.ToList();
}

ViewData に Enumerable レコードを入力したいと考えています。

4

2 に答える 2

3

DataContext インスタンスで ExecuteQuery メソッドを呼び出すことができます。ここで概説されているように、Type インスタンスを受け取るオーバーロードを呼び出す必要があります。

http://msdn.microsoft.com/en-us/library/bb534292.aspx

テーブルに正しく属性付けされた型があると仮定すると、その型の Type インスタンスと SQL を渡すと、必要なものが得られます。

于 2009-02-13T19:49:15.633 に答える
0

casperOne が既に回答ExecuteQueryしたように、メソッドの最初のオーバーロード (Type パラメーターを要求するもの) を使用できます。同様の問題があり、あなたが例を尋ねたので、ここに1つがあります:

public IEnumerable<YourType> RetrieveData(string tableName, string name)
        {
            string sql = string.Format("Select * FROM {0} where Name = '{1}'", tableName, name);

            var result = YourDataContext.ExecuteQuery(typeof(YourType), sql);

            return result;
        }

YourTypeコンストラクターを持つ型を定義する必要があるため、注意してください (抽象型またはインターフェイス型にすることはできません)。SQL テーブルとまったく同じ属性を持つカスタム型を作成することをお勧めします。これを行うと、ExecuteQuery メソッドによって、テーブルの値がカスタム型に自動的に「挿入」されます。そのように:

//This is a hypothetical table mapped from LINQ DBML

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ClientData")]
    public partial class ClientData : INotifyPropertyChanging, INotifyPropertyChanged
    {
private int _ID;

        private string _NAME;

        private string _AGE;
}

//This would be your custom type that emulates your ClientData table

public class ClientDataCustomType 
    {

        private int _ID;

        private string _NAME;

        private string _AGE;
}

したがって、前の例では、ExecuteQuery メソッドは次のようになります。

var result = YourDataContext.ExecuteQuery(typeof(ClientDataCustomType), sql);
于 2012-11-13T19:06:55.537 に答える