每个linq的条件

时间:2011-08-18 19:29:36

标签: c# asp.net-mvc

我有一个List<string> myList,如下所示:

widget1
widget2
widget3
widget4

我想在我的网页上显示此内容,如下所示

widget1 | widget3 | widget4

让我们说一下,如果字符串是“widget2”,请将其删除。

有没有办法用linq语句来做到这一点?

<div>
    <% myList.ForEach(x => Response.Write(Html.ActionLink(x.Name,"ActionMethod"))); %>
</div>

我知道我的要求太多,但我想我会尝试。

4 个答案:

答案 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());

String.Join Method (String, String[])

答案 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。