好的,这是我的问题。我正在使用Salesforce API中的saveresult,我正在学习LINQ。这可能不是在这里使用的最好的东西,我不知道,但这是我正在努力做的事情,更加雄辩。
BTW,这是saveresult []类缩小到定义:
public partial class SaveResult {
private Error[] errorsField;
private string idField;
private bool successField;
[System.Xml.Serialization.XmlElementAttribute("errors")]
public Error[] errors
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string id
public bool success
}
这就是我想要做的。检查错误,如果任何返回的保存结果中有任何错误,则返回错误;如果没有错误,则返回null。
string errors = null;
foreach (SaveResult s in saved)
{
if (s.success) continue;
else
{
foreach (Error e in s.errors)
{
errors += String.Format("Errors on object: {0}. Error Code is: {1}. Error Message: {2}",
s.id,e.statusCode.ToString(),e.message);
}
}
}
到目前为止,我有:
return saved
.Select(i => i.errors
.Select(j => new { j.statusCode, j.message })
.Distinct()
.ToList()
).ToString();
我很确定在我继续之前我需要一个匿名函数来评估我的错误。
无论如何,就是这样。感谢您的帮助(或指向我帮助的链接!)
答案 0 :(得分:4)
使用查询语法:
return string.Join("",
from s in saved
where ! s.Success
from e in s.Errors
select string.Format(
"Errors on object: {0}. Error Code is: {1}. Error Message: {2}",
s.id, e.statusCode);
这在幕后翻译为SelectMany
。
答案 1 :(得分:3)
我想你想要这个:
errors =
string.Join(Environment.NewLine,
saved.Where(x => !x.success)
.SelectMany(x => x.errors
.Select(y => string.Format("Errors on object: {0}. "
+ "Error Code is: {1}. "
+ "Error Message: {2}",
x.id,
y.statusCode.ToString(),
y.message)));
答案 2 :(得分:2)
通常,如果要遍历对象图,我更喜欢查询语法。这样:
from saveResult in saved
where !saveResult.success
from error in s.errors
select
string.Format("Errors on object: {0}. Error Code is: {1}. Error Message: {2}",
s.id, e.statusCode.ToString(), e.message)
将给出一系列字符串。要执行您当前正在执行的操作,您可以Join
将它们与string.Empty
一起作为分隔符,但为了便于阅读,您可能需要一些非空分隔符。
我认为在没有错误的情况下返回string.Empty
比null
更有意义,但是如果你愿意,没有什么能阻止你进行检查。总之:
var errors =
from saveResult in saved
where !saveResult.success
from error in s.errors
select
string.Format("Errors on object: {0}. Error Code is: {1}. Error Message: {2}",
s.id, e.statusCode.ToString(), e.message);
var aggregateErrors = string.Join(string.Empty, errors);
return string.IsNullOrEmpty(aggregateErrors)
? null
: aggregateErrors;
答案 3 :(得分:0)
return string.Join(Environment.NewLine, saved
.Where(save => !save.success)
.SelectMany(save => save.errors
.Select(err => Tuple.Create(save.id, err.statusCode, err.message)))
.Select(i => string.Format("Errors on object: {0}. Error Code is: {1}. Error Message: {2}",
i.Item1, i.Item2, i.Item3)));