我认为这是正确的术语......
基本上,我有一个转发器控件,以及一个检索一些项目的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>
答案 0 :(得分:2)
您有两个声明结果列表的选项:
ArrayList
或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";
}
这是你的意思吗?
的问候, 克里斯