LINQ Select 多个表字段可写

发布于 2025-01-03 18:03:52 字数 698 浏览 2 评论 0原文

我是 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可写呢?

I'm new to LINQ and I'm doing pretty well until now, but now stuck with this.

I've a LINQ object bounded to a DataGridView to let the user edit is contains.
for simple one table query, it go fine, but how to build a LINQ query with multiple table, so the result will still be read/write?

Here a example of what I mean:

    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;

In this simple query, if I return only "Msg" with the select statement, the grid can be edited. But if I replace the select statement with select new {lang.DescrFr, Msg.Message,Msg.pLangueID } ; the grid will be readable only.
I can easily understand that this is due because the query result is a anonymous type.
But is there a way to let the table tblMessage being writable?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乄_柒ぐ汐 2025-01-10 18:03:52

尝试创建自己的类,例如

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 
                       } ;

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

try creating your own class, for example

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

And at the select statement create an object of this class with new like below

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

This way you can avoid the anonymous type problem.

娇柔作态 2025-01-10 18:03:52

您需要选择原始行并显式设置网格列。

You need to select the originals rows and explicitly set the grid columns.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文