如何在MVC 4中使用Split()方法运行Distinct()方法?

时间:2017-07-03 09:12:40

标签: c# linq

MY SQL Table的数据用逗号分隔,如:

  • Wordpress,MVC
  • AngularJS,MVC,CSharp

我的MVC 4项目中有一个字符串数组:

@{
    foreach (var pot in Model)
    {
        string str = pot.Tags;
        string[] strT = str.Split(',');

        foreach (var poo in strT)

        {
            <button type="button" class="md-button md-warn @poo.ToLower().Replace(" ", "")">@poo</button>
        }
    }
}

这个功能的结果:

<button type="button" class="md-button md-warn wordpress">Wordpress</button>
<button type="button" class="md-button md-warn mvc"> MVC</button>
<button type="button" class="md-button md-warn angularjs">AngularJS</button>
<button type="button" class="md-button md-warn mvc"> MVC</button>
<button type="button" class="md-button md-warn csharp"> CSharp</button>

另外,我尝试.Distinct()方法在拆分后删除重复数据,但我无法正常工作。你有什么想法解决这个问题吗?

6 个答案:

答案 0 :(得分:2)

我希望您可以像这样使用Distinct

string[] strT = str.Split(',').Distinct().ToArray();

另一种方法是制作List<string>而不是数组。

List<string> strT = str.Split(',').Distinct().ToList(); 

您可以在List.DistinctRemove Duplicates

上阅读更多内容

答案 1 :(得分:1)

如果目标只是显示唯一标记,那么您需要先使用http://ui-grid.info/将多个集合展平为一个序列,以便能够正确使用Distinct来显示没有重复的按钮

@{
    var tags = Model.SelectMany(pot => pot.Tags
                        .Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(s => s.Trim())
                    )
                    .Distinct();

    foreach (var tag in tags) {
        <button type="button" class="md-button md-warn @tag.ToLower()">@tag</button>
    }
}

给出示例中提供的数据会导致

<button type="button" class="md-button md-warn wordpress">Wordpress</button>
<button type="button" class="md-button md-warn mvc">MVC</button>
<button type="button" class="md-button md-warn angularjs">AngularJS</button>
<button type="button" class="md-button md-warn csharp">CSharp</button>

答案 2 :(得分:0)

我将如何做到这一点:

var Model = new List<string>(){ "a,b,c", "b,c,d" };


foreach (var pot in Model.SelectMany(item => item.Split(',')).Distinct())
{
    string[] strT = pot.Split(',');

    foreach (var poo in strT)

    {
        Console.WriteLine(poo);
    }
}

答案 3 :(得分:0)

试试这个:

@{
List<string> ListWithDups = new List<string>();

foreach (var pot in Model)
{
    string str = pot.Tags;
    ListWithDups.InsertRange(ListWithDups.Count,str.Split(','));
}
ListWithoutDups = ListWithDups.Distinct().ToList();
foreach (var poo in ListWithoutDups)
{
    <button type="button" class="md-button md-warn @poo.ToLower().Replace(" ", "")">@poo</button>
}

答案 4 :(得分:0)

添加System.Linq引用并使用Distinc()方法。 请参阅:https://dotnetfiddle.net/oJKClC

中的运行示例
using System;
using System.Linq; // Add the Linq referece

public class Program
{
    public static void Main()
    {
        string str = "Wordpress, MVC, AngularJS, MVC, CSharp, Wordpress, MVC, AngularJS, MVC, CSharp";
        string[] strT = str.Replace(" ", string.Empty).Split(',');
        strT = strT.Distinct().ToArray();
        foreach (var poo in strT)

        {
            Console.WriteLine(string.Format("<button type='button' class='md-button md-warn {0}'>{0}</button>", poo.ToLower().Trim()));
        }

    }
}

答案 5 :(得分:0)

尝试代码:

  var str1= str.Split(',').Select(c=>c.Trim()).Distinct().ToList();

另一种解决方案是

var str1= str.Split(',').Select(c=>c.Trim()).GroupBy(c => c).ToList();