LINQ Select具有多个可写表字段
我是LINQ的新手,到目前为止我做得很好,但现在我坚持这一点 我有一个绑定到DataGridView的LINQ对象,允许用户编辑它所包含的内容。 对于简单的单表查询,这很好,但是如何用多个表构建LINQ查询,这样结果仍然是读/写的 下面是我的意思的一个例子:LINQ Select具有多个可写表字段,linq,readonly,Linq,Readonly,我是LINQ的新手,到目前为止我做得很好,但现在我坚持这一点 我有一个绑定到DataGridView的LINQ对象,允许用户编辑它所包含的内容。 对于简单的单表查询,这很好,但是如何用多个表构建LINQ查询,这样结果仍然是读/写的 下面是我的意思的一个例子: GMR.Data.GMR_Entities GMR = new GMR.Data.GMR_Entities(); var dt = from Msg in GMR.tblMessages join
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可写呢?例如,尝试创建自己的类
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
} ;
这样可以避免匿名类型问题。您需要选择原始行并显式设置网格列。这不会修改原始表。@SLaks我可能误解了问题,谢谢您的警告。