我面前的消息不正确,请不要回答其他帖子。
这是我遇到问题的代码部分。
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是table capitalisationActuelle的第一行,但它不是正确的值。例如,对于LibelléTOTApres= qfd,我应该得到test3而不是test5等。
答案 0 :(得分:1)
嗯,这个:
LibelléTOTAvant = cap.Select(c => c.Libelle_TOT).FirstOrDefault(),
只会选择第一个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?
答案 1 :(得分:1)
如果我理解正确,您可能需要选择与当前donneesDUMP的PMRQTOTM匹配的特定行:
LibelléTOTAvant = cap.First(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).LibelleTOT;
请注意,它是First()选择符合指定条件的行内的WHERE条件,而First是第一个(现在只有)行 - 与更详细的版本相同:
LibelléTOTAvant = cap.Where(c => c.PMRQTOTM == donneesDUMP.PMRQTOTM).First().LibelleTOT;