方法';第一';或者';FirstOrDefault';don';没有提供正确的数据

本文关键字:数据 don 或者 第一 FirstOrDefault 方法 | 更新日期: 2023-09-27 18:19:31

我前面的消息不正确,不要在其他帖子中得到答案

这是我遇到问题的代码部分。

Libelle_TOT和Groupe_Alerte是VarChar(50)

foreach (var donneesDUMP in don)
    {
        if (cap.Any(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM))
        {
            if(!cap.Any(c => c.Libelle_TOT == donneesDUMP.Libelle_TOT))
            {
                cnn.Resultat.Add(new Resultat
                {
                    NomTable = "CapitalisationActuelle",
                    Groupe_D_alerte = donneesDUMP.Groupe_Alerte,
                    NomChamp = "PMRQTOTM",
                    TOTMPMRQ = donneesDUMP.PMRQTOTM,
                    SiModifie = "Libelle TOT",
                    LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(),
                    //LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
                    //? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l))
                    //: " ",
                    LibelléTOTApres = donneesDUMP.Libelle_TOT,
                    Remarque = "Modifie"
                });
            }

LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(),

LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
                    ? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l))
                    : " ",

工作,我没有任何建筑错误。但每次我都有一个问题,可能是.First()和.FirstOrDefault()。它总是写第一个Libelle_TOT,而不是好的。

这是我得到的一个例子:http://zupimages.net/viewer.php?id=14/35/6ri4.png

LibelléTOTAvant有时具有相同的值(test5),因为test5是表capitalizationActuelle的第一行,但它不是正确的值。例如,对于LibelléTOTApres=qfd,我应该得到test3,而不是test5,等等。

方法';第一';或者';FirstOrDefault';don';没有提供正确的数据

如果我理解正确,您可能需要选择与当前衣服的PMRQTOTM匹配的特定行DUMP:

LibelléTOTAvant = cap.First(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).LibelleTOT;

请注意,这是First()中的WHERE条件,用于选择与指定条件匹配的行,以及用于获取第一行(现在也是唯一一行)的First条件——与更详细的版本相同:

LibelléTOTAvant = cap.Where(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).First().LibelleTOT;

这个:

LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(),

只会选择cap的第一个Libelle_TOT,因为你没有给出任何条件

这个:

LibelléTOTAvant = cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
                    ? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l))
                    : " ",

应该选择第一个非空的Libelle_TOT,尽管您可以将其替换为:

LibelléTOTAvant = cap.FirstOrDefault(c => !string.IsNullOrEmpty(c.Libelle_TOT));

因为如果没有空的libelle,它会给你null。

你只是想选择第一个非空的libelle吗?