LINQ选择多个表字段是可写的

时间:2012-02-09 19:39:41

标签: linq readonly

我是LINQ的新手,直到现在我做得还不错,但现在已经坚持了。

我有一个LINQ对象绑定到DataGridView以允许用户编辑包含。 对于简单的一个表查询,它没问题,但是如何用多个表构建一个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语句返回“Msg”,则可以编辑网格。但是如果我用select new {lang.DescrFr,Msg.Message,Msg.pLangueID}替换select语句;网格只能读取。 我很容易理解这是因为查询结果是匿名类型。 但有没有办法让表tblMessage可写?

2 个答案:

答案 0 :(得分:0)

尝试创建自己的类,例如

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

select语句中,使用new创建此类的对象,如下所示

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

这样可以避免匿名类型问题。

答案 1 :(得分:0)

您需要选择原始行并明确设置网格列。