C# 每个linq的条件

C# 每个linq的条件,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个列表我的列表,如下所示: widget1 widget2 widget3 widget4 我想在我的网页上显示如下 widget1 | widget3 | widget4 如果字符串是“widget2”,则将其忽略。 有没有办法用linq语句实现这一点 <div> <% myList.ForEach(x => Response.Write(Html.ActionLink(x.Name,"ActionMethod"))); %> </div&

我有一个
列表
我的列表,如下所示:

widget1
widget2
widget3
widget4
我想在我的网页上显示如下

widget1 | widget3 | widget4
如果字符串是“widget2”,则将其忽略。

有没有办法用linq语句实现这一点

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

Response.Write(Html.ActionLink(x.Name,“ActionMethod”);%>

我知道我要求的太多了,但我想我应该试试。

您可以将String.Join方法与Linq结合使用:

List<string> list = new List<string>();
// populate list here.

string result = String.Join(" | ", list.Where(c => c.Name != "widget2").ToList());
List List=新列表();
//在这里填充列表。
string result=string.Join(“|”,list.Where(c=>c.Name!=“widget2”).ToList();

您可以将String.Join方法与Linq结合使用:

List<string> list = new List<string>();
// populate list here.

string result = String.Join(" | ", list.Where(c => c.Name != "widget2").ToList());
List List=新列表();
//在这里填充列表。
string result=string.Join(“|”,list.Where(c=>c.Name!=“widget2”).ToList();

您喜欢这项工作吗

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

x、 名字!=“widget2”).ToList().ForEach(x=>Response.Write(Html.ActionLink(x.Name,“ActionMethod”));%>

在ForEach(…)调用之前引入“conditional”部分。

您希望这项工作吗

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

x、 名字!=“widget2”).ToList().ForEach(x=>Response.Write(Html.ActionLink(x.Name,“ActionMethod”));%>

在ForEach(…)调用之前引入“conditional”部分。

您可以这样做:

<%= String.Join(" | ", myList
    .Where(x => x.Name != "Widget 2")
    .Select(x => Html.ActionLink(x,"ActionMethod").ToString()) %>
x.名称!=“小部件2”)
.Select(x=>Html.ActionLink(x,“ActionMethod”).ToString())%>

然后修改where语句以满足您的需要。我想这是一个偏好问题,但我不喜欢使用Response.Write-in-views,我尽量避免使用ForEach()方法,因为它不适用于普通的IEnumerables。

您可以这样做:

<%= String.Join(" | ", myList
    .Where(x => x.Name != "Widget 2")
    .Select(x => Html.ActionLink(x,"ActionMethod").ToString()) %>
x.名称!=“小部件2”)
.Select(x=>Html.ActionLink(x,“ActionMethod”).ToString())%>

然后修改where语句以满足您的需要。我想这是一个偏好问题,但我不喜欢使用Response。在视图中编写,我尽量避免使用ForEach()方法,因为它不适用于普通的IEnumerables。

排除widget2的标准是什么?@Paul
List
已经有了一个
。ForEach()
--OP在上面使用了它……更新了Widget2标准的OP。@ckittel:很好。:)虽然一旦应用了筛选,它将不再是一个列表。排除widget2的标准是什么?@Paul
list
已经有了一个
.ForEach()
--上面的OP使用了它…更新了widget2标准的OP。@ckitel:好的观点。:)虽然一旦应用了筛选,它将不再是一个列表。使用linq在此列表上使用谓词,并使用string.join作为筛选列表的结果。使用linq在此列表上使用谓词,并使用string.join作为筛选列表的结果。是否有办法将管道符号作为分隔符包含?@rod我没有意识到“|”ing也是问题的一部分,我假设您的
ForEach(…)
代码是伪代码,并且正在执行管道。我建议查看@AHM的答案(+1ed)以获得完整的包。有没有办法将管道符号作为分隔符包含在内?@rod我没有意识到“|”也是问题的一部分,我假设您的
ForEach(…)
代码是伪代码,正在进行管道操作。我建议查看@AHM的答案(+1ed)以获得完整的包。这会留下尾管符号吗?这会留下尾管符号吗?我必须使用ToArray()代替ToString(),因为String.Join第二个参数正在查找数组,对吗?您可能必须-String.Join()的重载接受IEnumerable的是在.NET4中引入的。如果您使用的是早期版本的框架,那么您必须使用.ToArray(),我必须使用ToArray()代替ToString(),因为String.Join第二个参数正在查找数组,对吗?您可能必须-接受IEnumerable的String.Join()重载是在.NET 4中引入的。如果您使用的是早期版本的框架,则必须使用.ToArray()