LINQ:自定义列名

Bry*_*oth 17 linq asp.net datagridview linq-to-sql

UPDATE

我基本上将查询绑定到WinForms DataGridView.我希望列标题合适,并在需要时包含空格.例如,我想要一个列标题First Name代替FirstName.


如何在LINQ中创建自己的自定义列名?

例如:

Dim query = From u In db.Users _
            Select u.FirstName AS 'First Name'
Run Code Online (Sandbox Code Playgroud)

Sco*_*ols 26

正如CQ所述,您不能为字段名称提供空间,但您可以返回新列.

var query = from u in db.Users
            select new
            {
                FirstName = u.FirstName,
                LastName = u.LastName,
                FullName = u.FirstName + " " + u.LastName
            };
Run Code Online (Sandbox Code Playgroud)

然后你可以绑定到上面的变量查询或循环通过它无论....

foreach (var u in query)
{
   // Full name will be available now 
   Debug.Print(u.FullName); 
}
Run Code Online (Sandbox Code Playgroud)

如果要重命名列,可以,但不允许使用空格.

var query = from u in db.Users
            select new
            {
                First = u.FirstName,
                Last = u.LastName
            };
Run Code Online (Sandbox Code Playgroud)

将FirstName重命名为First,LastName重命名为Last.


Sco*_*ols 14

如果要更改标题文本,可以在GridView定义中设置...

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,您可以绑定到用户,它将标题设置为名字.

protected void Page_Load(object sender, EventArgs e)
{
     // initialize db datacontext
     var query = from u in db.Users
                 select u;
     GridView1.DataSource = query;
     GridView1.DataBind();
}
Run Code Online (Sandbox Code Playgroud)


Bry*_*oth 13

我解决了自己的问题,但你的所有答案都非常有帮助,并指出了我正确的方向.

在我的LINQ查询中,如果列名有多个单词,我会用下划线分隔单词:

Dim query = From u In Users _
            Select First_Name = u.FirstName
Run Code Online (Sandbox Code Playgroud)

然后,在Paint方法中DataGridView,我用空格替换了标题中的所有下划线:

Private Sub DataGridView1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGridView1.Paint
    For Each c As DataGridViewColumn In DataGridView1.Columns
        c.HeaderText = c.HeaderText.Replace("_", " ")
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)


小智 6

您还可以添加一个事件处理程序来替换这些下划线!

对于那些喜欢C#的人:

datagrid1.ItemDataBound += 
    new DataGridItemEventHandler(datagrid1_HeaderItemDataBound);
Run Code Online (Sandbox Code Playgroud)

你的处理程序应如下所示:

private void datagrid1_HeaderItemDataBound(object sender, DataGridItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Header)
    {
        foreach(TableCell cell in e.Item.Cells)
            cell.Text = cell.Text.Replace('_', ' ');
    }

}
Run Code Online (Sandbox Code Playgroud)