首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ中的匿名类型

LINQ中的匿名类型
EN

Stack Overflow用户
提问于 2011-05-06 22:13:01
回答 1查看 267关注 0票数 0

我使用以下代码从我的数据库表tblDatabases中获取一条记录。然后,我根据值填充窗体上的控件。我使用了一些函数来获取在文本框中显示所需的值(例如,显示值与值不同。

DetailData是我的窗体基类中的一个对象。最初,我只是按原样从表中获得记录,并且我能够将DetailData转换为tblDatabases,并使用反射来获取数据的所有值并填充表单上的控件。

由于匿名类型,我不能再将DetailData强制转换到我的表中。

我希望能够在DetailData上使用反射来获取值。

谢谢,布拉德

代码语言:javascript
复制
  DetailData = (from db in priorityDataContext.tblDatabases
      where db.DatabaseID == Id
      select new
        {
            db.DatabaseID,
            db.DatabaseName,
            db.Purpose,
            db.BackEnd,
            db.FrontEnd,
            db.Version,
            db.ProducesReports,
            db.MultiUser,
            db.UserDescription,
            Developer = priorityDataContext.func_get_employee_name(db.Developer),
            DeptOwner = priorityDataContext.func_get_dept_name(db.DeptOwner),
            db.Source_Code_Path,
            db.Notes,
            db.Active,
            db.row_entry_time_stamp,
            row_oper_name = priorityDataContext.func_get_employee_name(db.Developer),
            db.row_last_chng_time_stamp,
            row_last_chng_oper_name = priorityDataContext.func_get_employee_name(db.Developer)
        }).SingleOrDefault();


protected virtual void PopulateDetailControlsA(List<Control> controlContainers, string srcDataTableName)
{
    switch (srcDataTableName)
    {
        case "tblDatabase" :
            break;
    }

    var database = (tblDatabase) DetailData;
    var type = typeof(tblDatabase);
    var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

    foreach (var controlContainer in controlContainers)
    {
        foreach (var propertyInfo in properties)
        {
            if (!ControlExists(controlContainer, propertyInfo.Name)) continue;

            var txtExtControl = controlContainer.Controls[propertyInfo.Name] as ExtendedTextBox;
            if (txtExtControl != null)
            {
                try
                {
                    var value = propertyInfo.GetValue(database, null).ToString();

                    txtExtControl.Text = value;
                }
                catch (NullReferenceException)
                {
                }
                continue;
            }

            var lnklblControl = controlContainer.Controls[propertyInfo.Name] as ExtendedLinkLabel;
            if (lnklblControl != null)
            {
                try
                {
                    var value = propertyInfo.GetValue(database, null).ToString();

                    lnklblControl.Text = value;
                }
                catch (NullReferenceException)
                {
                }
                continue;
            }

            var chkControl = controlContainer.Controls[propertyInfo.Name] as ExtendedCheckBox;
            if (chkControl != null)
            {
                try
                {
                    var value = propertyInfo.GetValue(database, null).ToString();

                    switch (value)
                    {
                        case "True":
                            chkControl.CheckState = CheckState.Checked;
                            break;
                        case "False":
                            chkControl.CheckState = CheckState.Unchecked;
                            break;
                    }
                }
                catch (NullReferenceException)
                {
                    chkControl.CheckState = CheckState.Indeterminate;
                }
                continue;
            }

            var cmbControl = controlContainer.Controls[propertyInfo.Name] as ExtendedComboBox;
            if (cmbControl != null)
            {
                try
                {
                    var value = propertyInfo.GetValue(database, null).ToString();

                    cmbControl.ValueMember = value;
                }
                catch (Exception ex)
                {
                }
                continue;
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-06 22:46:18

你的UI使用的是什么技术?如果可以使用绑定,就不需要担心匿名类型上的反射,如果需要格式化/计算值,还可以使用转换器。

根据您的响应,您不能只使用到linq的连接,然后将其绑定到组合框吗?

代码语言:javascript
复制
    private void Form1_Load(object sender, System.EventArgs e)
    {
        var item = new DataClassesDataContext();
        var stuff = item.Entity.Where(c => c.Property.Contains("something"));
        comboBox1.DataSource = stuff;
        comboBox1.DisplayMember = "Name";
        comboBox1.ValueMember = "PIN";
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5912665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档