如何验证4个字段不以任何方式重复

时间:2017-04-26 22:29:25

标签: c# asp.net .net linq

我有一个表格,其中有4个字段是手机,我需要验证这4个字段都不会在其中重复。

我自己没有开发这个,这是由我们的一个开发人员完成的,所以我想知道是否有办法在linq或词典的一行中做到这一点?

private bool Celularesvalidation(string c1, string c2, string c3, string c4)
{
    var rs = false;
    if (!string.IsNullOrEmpty(c2))
    {
        if (c1 == c2)
        {
            rs = true;
        }
    }
    if (!string.IsNullOrEmpty(c3))
    {
        if (c3 == c1 || c3 == c2)
        {
            rs = true;
        }
    }
    if (!string.IsNullOrEmpty(c4))
    {
        if (c4 == c1 || c4 == c2 || c4 == c3)
        {
            rs = true;
        }
    }

    return rs;
}

4 个答案:

答案 0 :(得分:3)

只是一个想法:

var cellphones = new string[] { c1, c2, c3, c4 };
bool allDistinct = cellphones.Distinct().Count() == cellphones.Count();

答案 1 :(得分:1)

获取不同的记录并进行比较。

private bool Celularesvalidation(string c1, string c2, string c3, string c4)
{
    var cellPhones = new[] { c1,c2,c3,c4};
    var distinctCellPhones   = cellPhones.Distinct();
    return  distinctCellPhones.Count() < cellPhones.Count();
}

答案 2 :(得分:1)

是的,如果你真的想,你可以在一行中完成。此示例还包括强制它们都不为null或为空:

private bool CelularesValidation(string c1, string c2, string c3, string c4)
{
    return new[] { c1, c2, c3, c4 }.Where(c => !string.IsNullOrEmpty(c))
        .Distinct().Count() == 4;
}

答案 3 :(得分:0)

另一种做同样事情的方式

Using Linqpad

   var list = new List<string> { c1, c2, c3, c4 };
    var result = list.GroupBy(l => l, (a, b) => new { Key = a, Count = b.Count() }).Where(obj => obj.Count > 1 && !string.IsNullOrWhiteSpace(obj.Key)).FirstOrDefault() != null;
    result.Dump();