4

私はSQLでこのクエリを持っていますが、うまくいきます:

update userinfo set Interest = 0.98 where userid = 313  

そして、linqでやりたいので、以下を用意しました。

public class TableDataDTO
{
    public string Columnname { get; set; }
    public string Value { get; set; }
    public Type DataType { get; set; }
}  

実装:

TableDataDTO tableData = new TableDataDTO();
tableData.Columnname = "Interest";
tableData.Value = "0.98";

using (dbase instance = new dbase())
{
    string predicate = string.Format("it.UserID=={0} set it.{1}={2}" ,
                313, tableData.Columnname, tableData.Value);

    var uinfo = instance.userinfoes.Where(predicate).FirstOrDefault();

    if (uinfo != null)
    {
        instance.SaveChanges();
        return true;
    }
}  

しかし、それは私にこのエラーを与えます:

The query syntax is not valid. Near keyword 'SET'  

さまざまな列を扱うので、linq 述語を使用してコードを最小限に抑える必要があります。これを行うためにプラグインを使用するのは好きではありません。誰かが助けてくれることを願っています。

編集

私が言いたいのは"How to update data in using Dynamic linq"

編集2

これが実際のシナリオです。ユーザー/クライアントは、名前、姓、住所、都市などの情報を一度に更新するのではなく、情報を 1 つずつ更新することができます。
それで、それはどういう意味ですか?わかりました、名前を更新できるメソッドを作成できます。次は姓、住所などです。しかし、これを行うと、多くのコードが消費されます。データを更新する際にSQLが行うことを実行できるコードがlinqにある場合にのみ、列名を取得してその値を設定するコードが必要になります。うまく説明できれば幸いです。

編集3

述語の本当の意味を誤解していたため、質問を からHow to update data in linq using predicates?に変更しました。How to update column data using sql query in linq?

4

2 に答える 2

1

述語は、クエリのwhere部分にする必要があります (述語は true または false を返すだけです)。これを試して:

instance.userinfoes.Where(user => user.userid == 313).First().Interest = 0.98;
于 2012-06-25T07:07:43.320 に答える
0

SQL を構造化するのと同じように、LINQ を構造化できます。Where と ForEach を組み合わせることで、必要なすべての行を更新できるはずです。すなわち:

    instance.userinfoes.Where(it => it.UserId == 313).ToList()
                       .ForEach(
                           it => it.Interest = 0.98M
                        );

私の知る限り、SQL のようなクエリをテキストとして記述し、通常の LINQ に渡す方法は実際にはありません。

その他の解決策については、この質問を参照してください: LINQ を使用してコレクション内のすべてのオブジェクトを更新する

于 2012-06-25T07:29:37.470 に答える