是否可以使用匿名类型进行数据绑定?

时间:2011-02-16 13:47:43

标签: c# asp.net repeater

我认为这是正确的术语......

基本上,我有一个转发器控件,以及一个检索一些项目的Linq查询。通常我会直接对查询进行数据绑定,并使用Eval用结果填充模板。

然而,它并没有以完全正确的格式出现 - 例如,如果EndDate为null(它是一个DateTime?),那么我想用“Present”替换它。我在查询结果对象中只使用了几个属性。

我想知道是否有类似的解决方案:

[pseudo madeup code]
var query = getResults();

List<anonymous> anonList = new List();

foreach (var q in query)
{
   string myEndDate = "";
   if (q.EndDate.HasValue) 
       { myEndDate = q.EndDate.ToString(); }
   else 
       { myEndDate = "Present"; }

   anonList.items.add(new { name=q.name, enddate=myEndDate };
}

repeater.Datasource = anonList;

然后

<div><%#Eval("enddate")%></div>

3 个答案:

答案 0 :(得分:2)

您有两个声明结果列表的选项:

  1. 使用非通用ArrayList
  2. 使用Enumerable.Repeat,即。 var anonList = Enumerable.Repeat(new { name="", enddate=""}, 0).ToList();

答案 1 :(得分:1)

是的,你可以绑定匿名类型,但生成这些类型序列的代码必须改变一点:

repeater.DataSource
    = getResults()
        .Select(q => new {
            name = q.name,
            enddate = (q.EndDate.HasValue) 
                        ? q.EndDate.ToString() 
                        : "Present"
        });

答案 2 :(得分:1)

你可以带安德鲁斯样本:

repeater.DataSource    = getResults()
    .Select(q => new {
        name = q.name,
        enddate = (q.EndDate.HasValue)
                     ? q.EndDate.ToString()
                     : "Present"        });

但是不是计算enddate inline,而是调用函数:

repeater.DataSource = getResults()
    .Select(q => new {
        name = q.name,
        enddate = GetEndDate(q)});


    private void GetEndDate(TypeOfQ q)
    {
       return (q.EndDate.HasValue) ? q.EndDate.ToString() : "Present";
    }

这是你的意思吗?

的问候, 克里斯