【问题标题】:Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'int'无法确定条件表达式的类型,因为 'string' 和 'int' 之间没有隐式转换
【发布时间】:2012-05-19 19:47:10
【问题描述】:

首先,我知道这是一个常见问题。但是我不能使用其他解决方案,因为我正在比较不能为可空类型的类型,例如我的三元运算符中的 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
                };

【问题讨论】:

  • 错误在哪一行?如果它是最后一行代码(不包括括号),那么这正是它所说的问题:您的两个替代方案是String.Format,其类型为string0,其类型为int。将...("AppraisalFees")) : 0): 0 更改为...("AppraisalFees")) : 0): "0",您将得到一个包含两个字符串且没有错误的三元。
  • 这个解决方案有效,我发誓我以为我在 0 周围加上了引号并得到了编译错误,感谢您的帮助!!

标签: c# linq-to-sql


【解决方案1】:

尝试将参数内的三元表达式移动到String.Format

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

您还可以将其写成两行以使其更易于阅读:

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

【讨论】:

  • 这个解决方案有效,非常感谢,它就在我眼前;)
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2018-09-27
  • 2016-03-08
相关资源
最近更新 更多