我到处都有这样的陈述。有没有办法在一行中完成所有操作?也许C#6.0中的某些内容会有所帮助吗?我只是想获取值,如果有东西,如果没有然后返回一个空字符串或可能是NULL。
var item = ll.Fields.Where(x => x.FieldTitle == "Loan Amount");
if (item.Count() != 0) {
LatestItem.VelocifyLoanAmount = double.Parse(item.FirstOrDefault().Value);
}
编辑1:这是一个双倍,但有时我需要得到一个字符串。我喜欢我能快速获得LINQ问题的帮助。我的Excel VSTO插件问题得到了蟋蟀:)
答案 0 :(得分:4)
为什么不简单:
var item = ll.Fields
.Where(x => x.FieldTitle == "Loan Amount")
.Select(x => (double?)double.Parse(x.Value))
.FirstOrDefault();
答案 1 :(得分:2)
您可以做的一件事是:
var item = ll.Fields.FirstOrDefault(x => x.FieldTitle == "Loan Amount")?.Value;
if (!double.TryParse(item, out LatestItem.VelocifyLoanAmount)
{
// do your error case here
}
更新:添加了C#6.0语法以缩短语法,并使用首选TryParse
代替错误检查。
更新2:如果由于某种原因double.Parse
是首选(例如,如果包装器正在处理大块代码的异常),这里有一个较短的例子。
LatestItem.VelocifyLoanAmount =
double.Parse(ll.Fields.FirstOrDefault(x => x.FieldTitle == "Loan Amount")?.Value);
答案 2 :(得分:1)
您可以使用Select
将集合中的对象投影到double?
并返回FirstOrDefault
double? parsedFirstValueOrNull = ll.Fields
.Where(x => x.FieldTitle == "Loan Amount")
.Select(i => (double?)double.Parse(i.Value))
.FirstOrDefault();
强制转换double?
是必要的,否则FirstOrDefault
将为空集合返回0.0,这可能不明确。
答案 3 :(得分:1)
我到处都有这样的陈述。
由于您多次这样做,您可能希望提高效率,而不是减少行数。解决此问题的一种方法是立即将所有字段提取到Dictionary
,然后根据需要快速获取项目:
var fieldNames = new Set<string> {
"Loan Amount", "Loan Balance", "Amount Due"
};
var dict = ll
.Fields
.Where(f => fieldNames.Contains(f.FieldTitle))
.ToDictionary(f => f.FieldTitle, f => double.Parse(f.Value));
dict.TryGetValue("Loan Amount", out LatestItem.VelocifyLoanAmount);
dict.TryGetValue("Loan Balance", out LatestItem.VelocifyLoanBalance);
dict.TryGetValue("Amount Due", out LatestItem.VelocifyAmountDue);
答案 4 :(得分:0)
您可以执行以下操作:
var item = ll.Fields.Where(x = > x.FieldTitle == "Loan Amount").FirstOrDefault();
return (item != null) ? item.Value : DefaultReturnValue;
该回报使用第三运营商。第一个值是布尔检查。如果布尔值为真则为&#34;?&#34;之后的值。退回。否则,&#34;之后的价值:&#34;被退回;