如何使用linq改善此问题?

时间:2019-05-13 08:08:05

标签: c# linq

我有这段代码:

foreach(var planning in Planning)
{

    if (onlyOneMatrice)
    {
        if (idMatrice == null || planning.IDMatrice == idMatrice)
        {
            idMatrice = planning.IDMatrice;
        }
        else
        {
            onlyOneMatrice = false;
        }
    }
    else
            {
                idMatrice = null;
                _ErrorMatrice = $"Error";
            }
    }
}

谁丑。我正在尝试使用Linq来减少它,但是我必须在某个地方弄错了。有我的测试:

bool IsMonoOrEmptyMatrice()
{
    var id = Planning.FirstOrDefault(x=> { return x.IDMatrice != null});
    return id==null || Planning.All( x => { return x.IDMatrice == null || x.IDMatrice == id});
}

但是每次都返回null。

我有一个observableCollection“计划”,每个对象都包含一个“ idMatrice”数据。 我要检查的是列表上的所有idMatrices都相同。

示例:对于要扫描的对象“ A”,所有矩阵都必须相同。如果找到两个不同的矩阵,我将返回错误消息。

我也想到了类似的东西:

Planning.Distinct().Count() > 1 ? "somethingHere" : null ;

如果有人有建议.....在此先谢谢您

编辑:计划对象:

    public partial class Planning
{
    public System.DateTime Jour { get; set; }
    public string Matricule { get; set; }
    public Nullable<int> Cycle { get; set; }
    public string Type_Jour { get; set; }
    public Nullable<System.DateTime> Heure_début1 { get; set; }
    public Nullable<System.DateTime> Heure_fin1 { get; set; }
    public string Type_Prise1 { get; set; }
    public string IDEtablissement1 { get; set; }
    public string IDSection1 { get; set; }
    public Nullable<int> Couleur1 { get; set; }
    public bool Visible1 { get; set; }
    public string Type_Durée { get; set; }
    public string IDEtablissement_Durée { get; set; }
    public string IDSection_Durée { get; set; }
    public string IDService_Durée { get; set; }
    public Nullable<System.DateTime> Date_MAJ { get; set; }
    public string IDMatrice { get; set; }
}

1 个答案:

答案 0 :(得分:2)

检查此代码段是否符合您的要求

// check if any IdMatrice is null
if(Planning.Any(p => p.IDMatrice == null))
    //return error

if(Planning.GroupBy(p => p.IDMatrice).Count() > 1)
    // list is not identical
else
    // list is identical