【问题标题】:LINQ Select with multiple tables fields being writeable具有多个可写字段的 LINQ Select
【发布时间】:2012-02-09 19:39:41
【问题描述】:

我是 LINQ 的新手,到现在为止我都做得很好,但现在坚持下去了。

我有一个绑定到 DataGridView 的 LINQ 对象,让用户编辑包含。 对于简单的单表查询,它运行良好,但是如何构建一个多表的 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 可写?

【问题讨论】:

    标签: linq readonly


    【解决方案1】:

    例如尝试创建自己的类

    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 我可能误解了这个问题,谢谢你的警告。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多