C#No方法'ToString'的重载需要1个参数

时间:2014-08-27 07:08:37

标签: c# sql wpf database linq

这就是我的错误:

foreach (var donneesDump in don)
{
    if (cap.Any(c => c.PMRQTOTM == donneesDump.PMRQTOTM))
    {
        if(!cap.Any(d => d.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.Any(c => c.Libelle_TOT),
                LibelléTOTApres = donneesDump.Libelle_TOT,
                Remarque = "Ajoute"
            });
        }
    }
}

在线LibelléTOTAvant = cap.Any(c => c.Libelle_TOT) 我有两个错误,最后是相同的:

  

无法将lambda表达式转换为委托类型“System.Func”,因为块中的某些返回类型不能隐式转换为委托返回类型。 AND无法将类型'string'隐式转换为'bool'。

我尝试使用ToString()方法解决问题,如下所示:

LibelléTOTAvant = ToString(cap.Any(c => c.Libelle_TOT)),

然后我有错误:

  

方法'ToString'没有重载需要1个参数。

这不是我第一次遇到这种错误,但我仍然没有找到解决这个问题的方法..

提前致谢。 问候。

编辑1:

这就是我。

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,而不是好的。

1 个答案:

答案 0 :(得分:3)

我相信Libelle_TOT是一个字符串(来自Cannot implicitly convert type 'string' to 'bool'.错误消息)

在这种情况下,

cap.Any(c => c.Libelle_TOT)没有意义,因为Any应该有一个Func<T, bool>作为参数(返回bool的东西)并传递Func<T, string>

所以你应该做

cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
例如

,或任何其他需要返回bool的东西。

如果LibelléTOTAvant是一个字符串

cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
   ? <something which is a string>
   : <something else which is a string>

修改

例如

cap.Any(c => !string.IsNullOrEmpty(c.Libelle_TOT))
   ? cap.Select(x => x.Libelle_TOT).First(l => !string.IsNullOrEmpty(l))
   : 'No Label'

或者在这种情况下,你可以做

   cap.Select(x => x.Libelle_TOT).FirstOrDefault(l => !string.IsNullOrEmpty(l)) ?? 'No Label'