C# 无法确定条件表达式的类型,因为“string”和“int”之间没有隐式转换

C# 无法确定条件表达式的类型,因为“string”和“int”之间没有隐式转换,c#,linq-to-sql,C#,Linq To Sql,首先,我知道这是一个常见的问题。但我不能使用其他解决方案,因为我比较的是不能为null的类型,比如三元运算符中的DataRow类型。我也无法格式化网格中的货币,因为我正在旋转数据,并且必须将“自动生成列”设置为true。我也无法在其他地方格式化货币,因为我希望通过一次调用获取原始数据,并在应该进行格式化的地方进行格式化。我需要使用LinqSql,因为在将数据绑定到Telerik RadGrid之前,我就是这样准备数据的 var drResults = from t1 in DatesTable.

首先,我知道这是一个常见的问题。但我不能使用其他解决方案,因为我比较的是不能为null的类型,比如三元运算符中的DataRow类型。我也无法格式化网格中的货币,因为我正在旋转数据,并且必须将“自动生成列”设置为true。我也无法在其他地方格式化货币,因为我希望通过一次调用获取原始数据,并在应该进行格式化的地方进行格式化。我需要使用LinqSql,因为在将数据绑定到Telerik RadGrid之前,我就是这样准备数据的

var drResults = from t1 in DatesTable.AsEnumerable()
                join t2 in dtResult.AsEnumerable() on t1["MONTH_YEAR"] equals t2["MONTH_YEAR"] into t1_t2
                from t2 in t1_t2.DefaultIfEmpty()
                select new
                {
                    MONTH_YEAR = t1.Field<string>("MONTH_YEAR"),
                    Appraisal_Fees = t2 != null ? String.Format("{0:C}", t2.Field<decimal>("AppraisalFees")) : 0): 0
                };

尝试将argement中的三元表达式移动到String.Format

您还可以通过将其写在两行上使其更易于阅读:

decimal appraisalFees = (t2 != null ? t2.Field<decimal>("AppraisalFees") : 0M);
Appraisal_Fees = String.Format("{0:C}", appraisalFees);

错误在哪一行?如果它是不包括括号的最后一行代码,那么问题就在于它所说的:您的两个选项是String.Format,类型为String或0,类型为int。将…evaluationFees:0:0更改为…evaluationFees:0:0,您将有一个包含两个字符串的三元值,并且没有错误。此解决方案有效,我发誓,我以为我在0周围加了引号,结果出现了编译错误,谢谢你的帮助!!这个解决方案奏效了,非常感谢,它就在我眼前;
decimal appraisalFees = (t2 != null ? t2.Field<decimal>("AppraisalFees") : 0M);
Appraisal_Fees = String.Format("{0:C}", appraisalFees);