我有一个List<string>
myList,如下所示:
widget1
widget2
widget3
widget4
我想在我的网页上显示此内容,如下所示
widget1 | widget3 | widget4
让我们说一下,如果字符串是“widget2”,请将其删除。
有没有办法用linq语句来做到这一点?
<div>
<% myList.ForEach(x => Response.Write(Html.ActionLink(x.Name,"ActionMethod"))); %>
</div>
我知道我的要求太多,但我想我会尝试。
答案 0 :(得分:1)
您可以将String.Join方法与Linq结合使用:
List<string> list = new List<string>();
// populate list here.
string result = String.Join(" | ", list.Where(c => c.Name != "widget2").ToList());
答案 1 :(得分:1)
var list = new List<string>() { "one", "two" };
var agg = list.Aggregate(new StringBuilder(),
(sb, item) => sb.AppendFormat((item == list.First()) ? "{0} " : "| {0}", item));
或者如果您不想每次都进行第一次检查
var agg = list.Aggregate(new StringBuilder(),
(sb, item) => sb.AppendFormat("{0} | ", item));
if (agg.Length > 0)
agg.Remove(agg.Length - 2, 2);
答案 2 :(得分:1)
这样的事情对你有用吗?
<div>
<% myList.Where(x => x.Name != "widget2").ToList().ForEach(x => Response.Write(Html.ActionLink(x.Name,"ActionMethod"))); %>
</div>
在ForEach(...)
来电之前引入“条件”部分。
答案 3 :(得分:1)
你可以这样做:
<%= String.Join(" | ", myList
.Where(x => x.Name != "Widget 2")
.Select(x => Html.ActionLink(x,"ActionMethod").ToString()) %>
然后只需修改where语句以满足您的需求。我想这是一个偏好问题,但我不喜欢在视图中使用Response.Write,我试图避免使用ForEach()方法,因为它不适用于普通的IEnumerables。