2012-02-09 4 views
1

私はLINQを初めて使用しています。LINQ書き込み可能な複数のテーブルフィールドを選択します。

ユーザーが編集できるようにDataGridViewにバインドされたLINQオブジェクトが含まれています。単純な1つのテーブルクエリの 、それはうまく行くが、結果は、複数のテーブルを持つLINQクエリをビルドする方法は、結果はまだ読み取り/書き込みですか?

ここで私が何を意味するかの例:この単純なクエリで

GMR.Data.GMR_Entities GMR = new GMR.Data.GMR_Entities(); 

    var dt = from Msg in GMR.tblMessages 
      join lang in GMR.tblDomVals on 1 equals 1//on Msg.pLangueID equals lang.ID 
      select Msg; 
      // select new {lang.DescrFr, Msg.Message,Msg.pLangueID } ; 

    this.dataGridView1.DataSource = dt; 

私はselect文で唯一の「メッセージ」を返す場合、グリッドは編集することができます。しかし、もし私が選択した文をselect new {lang.DescrFr、Msg.Message、Msg.pLangueID}に置き換えれば;グリッドは読み取り専用です。 クエリの結果が匿名型なので、これが原因であることは容易に理解できます。 テーブルにtblMessageを書き込み可能にする方法はありますか?

答えて

0

newなどの下に

select new MsgLangInfo { 
         langDescFr = lang.DescrFr, 
         langDescFr = Msg.Message,Msg.pLangueID 
         } ; 

あなたは匿名型の問題を避けることができるこの方法で、このクラスのオブジェクトを作成する例

public class MsgLangInfo 
{ 
public string langDescFr{get;set;} 
public int pLangueID{get;set;} 
} 

のためにそしてselect声明で、独自のクラスを作成してみてください。

+0

元のテーブルは変更されません。 – SLaks

+0

@SLaks警告のおかげで問題を誤解しているかもしれません。 – Bastardo

+0

@RoboLover、非常に多くの感謝! – Hugo

0

オリジナル行を選択し、グリッド列を明示的に設定する必要があります。

関連する問題