【问题标题】:Access properties in anonymous type collection - C#访问匿名类型集合中的属性 - C#
【发布时间】:2012-04-10 20:09:40
【问题描述】:

在下面的源代码中,我从users 集合中选择了一个属性子集,我需要将它绑定到一个下拉列表:

var locationDepts = (from u in users select new { u.RcNumber, u.RcName }).Distinct().ToList();

if(!locationDepts.Count.Equals(0))
{
    ddlRCListPerBuilding.DataSource = locationDepts;
    ddlRCListPerBuilding.DataValueField = "RcNumber";

    //Want to format display test "RCNumber - RcName"
    ddlRCListPerBuilding.DataTextField = string.Format("{0} - {1}", locationDepts.RcNumber, locationDepts.RcName);

    ddlRCListPerBuilding.DataBind();
}

我想将列表项显示文本格式化为匿名类型 RcNumber 和 RcName 的组合。如何访问匿名类型的属性以指示下拉列表项的文本格式?

【问题讨论】:

    标签: c# asp.net linq drop-down-menu anonymous-types


    【解决方案1】:

    您可以在数据源中创建一个名为“Combined”的新属性

    var locationDepts = (from u in users 
                        select new 
                        { 
                            u.RcNumber, 
                            Combined = u.RcNumber + " - " + u.RcName
                        }).Distinct().ToList();
    
    if(locationDepts.Count > 0)
    {
        ddlRCListPerBuilding.DataSource = locationDepts;
        ddlRCListPerBuilding.DataValueField = "RcNumber";
        ddlRCListPerBuilding.DataTextField = "Combined";
        ddlRCListPerBuilding.DataBind();
    }
    

    【讨论】:

    • 这是迄今为止最好的答案 - DataTextField 基本上是到对象属性名称的映射,因此您不能像使用 string.format 那样创建“计算”文本字段值 - 它而是寻找一个名为“RcNumber - RcName”的属性名称。
    【解决方案2】:

    我只是将匿名类型更改为包含已格式化的值:

    var locationDepts = (from u in users select new { u.RcNumber, RcName = String.Format("{0} - {1}", u.RcNumber, u.RcName) }).Distinct().ToList();
    
    if(!locationDepts.Count.Equals(0))
    {
        ddlRCListPerBuilding.DataSource = locationDepts;
        ddlRCListPerBuilding.DataValueField = "RcNumber";
    
        ddlRCListPerBuilding.DataTextField = "RcName";
    
        ddlRCListPerBuilding.DataBind();
    }
    

    【讨论】:

    • +1:我更喜欢你的 String.Format(...) 而不是@Magnus 的另一个答案中的串联
    • @MikeGoodwin 它仍然会连接它们(使用 String.Format),但代码会多一点,速度也会慢一点。
    【解决方案3】:

    你可以使用视图模型

    public class RcFields
    {
        public int RcNumber { get; set; }
        public string RcName { get; set; } 
    }
    
    List<RcFields> locationDepts = (from u in users 
                                    select new RcFields 
                                    { 
                                       u.RcNumber, 
                                       u.RcName 
                                    })
                                    .Distinct()
                                    .ToList();
    

    然后

     ... locationDepts.RcName ..
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多