Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVC4中使用Split()方法运行Distinct()方法?_C#_Linq - Fatal编程技术网

C# 如何在MVC4中使用Split()方法运行Distinct()方法?

C# 如何在MVC4中使用Split()方法运行Distinct()方法?,c#,linq,C#,Linq,我的SQL表中的数据以逗号分隔: 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) { <but

我的SQL表中的数据以逗号分隔:

  • 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>
        }
    }
}
@{
foreach(模型中的var pot)
{
string str=pot.Tags;
字符串[]strT=str.Split(',');
foreach(strT中的var poo)
{
@便便
}
}
}
此功能的作用和结果:

<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>
Wordpress
MVC
安格拉斯
MVC
CSharp

另外,我正在尝试
.Distinct()
方法来删除拆分后的重复数据,但我无法使用它。你有什么办法解决这个问题吗?

以下是我的方法:

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);
    }
}
var Model=newlist(){“a,b,c”,“b,c,d”};
foreach(模型中的变量pot.SelectMany(item=>item.Split(',')).Distinct()
{
字符串[]strT=pot.Split(',');
foreach(strT中的var poo)
{
控制台写入线(poo);
}
}

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

string[] strT = str.Split(',').Distinct().ToArray();
另一种方法是制作
列表
,而不是数组

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

您可以阅读更多信息,如果目标是仅显示唯一的标记,则需要首先使用将多个集合展平为一个序列,以便能够正确使用
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>
    }
}
@{
var tags=Model.SelectMany(pot=>pot.tags
.Split(新[]{',},StringSplitOptions.RemoveEmptyEntries)
.Select(s=>s.Trim())
)
.Distinct();
foreach(标签中的var标签){
@标签
}
}
考虑到示例中提供的数据,这将导致

<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>
Wordpress
MVC
安格拉斯
CSharp
试试这个:

@{
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>
}
@{
List ListWithDups=新列表();
foreach(模型中的var pot)
{
string str=pot.Tags;
ListWithDups.InsertRange(ListWithDups.Count,str.Split(',');
}
ListWithoutDups=ListWithDups.Distinct().ToList();
foreach(不带DUP的列表中的var poo)
{
@便便
}

添加System.Linq引用并使用Distinc()方法。 请参见中的运行示例:

使用系统;
使用System.Linq;//添加Linq引用
公共课程
{
公共静态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(strT中的var poo)
{
WriteLine(string.Format(“{0}”,poo.ToLower().Trim());
}
}
}
试试代码:

  var str1= str.Split(',').Select(c=>c.Trim()).Distinct().ToList();
另一个解决办法是

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

我不清楚你的实际问题是什么?你似乎甚至没有在你的代码中调用
Distinct
,而且你还没有告诉我们在尝试时出现了什么问题的细节。你有没有遇到编译错误?仍然存在重复的结果?删除你不期望的结果?其他什么?@Chris,我使用了.Distinct().ToList();方法,但当我运行项目Visual Studio时,没有出现任何错误,项目工作正常,因此复制的内容不会被删除。因此,我不知道该怎么办。问题是,如果您不向我们展示不工作的代码,我们很难理解出问题所在例如,现在我知道一个事实,上面的代码不是您遇到问题的代码(因为
Distinct
没有出现在其中的任何地方)。但我不知道上面的内容有多大不同。您在哪里有Distinct?您还有其他更改吗?谁知道呢?因此,请将您实际遇到问题的代码放入您的问题中。@Chris,我无法立即编辑我的问题,但这是我不工作的部分:string[]strT=str.Split(',')。Distinct().ToArray();正如我在发布问题之前的搜索一样,我找到了与您的答案相同的方法,但它不起作用。它没有给出任何错误,而且工作起来就像什么都没有发生一样。我不知道错误出在哪里。@EmirhanÖZKAN问题是对多个序列调用distinct只会删除单个序列中的重复项。它不适合其他可能与其他序列重复的序列。您必须将序列合并在一起,然后在合并的集合中查找不同的项目。感谢@Nkosi的解释。真是一个绅士精神。:@Mohithrivastava,您可以给我一个如何合并它们的建议吗?:)
var str1= str.Split(',').Select(c=>c.Trim()).GroupBy(c => c).ToList();