Ich weiß, das Thema "Sequenz enthält mehr als ein Element" wurde hier bereits behandelt, aber ich konnte nichts finden, was für meinen Fall gelten würde.
Hier ist der Code:Sequenz enthält mehr als ein Element - obwohl es mehr als eins enthalten sollte
var mailTo = db.DRAFT_DLs
.Where(dd => dd.MX_DL == argMailTo)
.Select(dd => new MailAddress(dd.EMAIL))
.ToList();
string mailCc = db.DRAFT_DLs
.Where(dd => dd.MX_DL == "ALL")
.Select(dd => dd.EMAIL)
.SingleOrDefault() ?? "";
// ...
mailTo.ForEach(rcpt => mail.To.Add(rcpt));
mail.CC.Add(mailCc);
komplette Fehlermeldung:
Message :System.InvalidOperationException: Sequence contains more than one element
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at IncidentEmailEngine.Program.Main(String[] args) in c:\Dane\VS\IncidentEmailEngine\IncidentEmailEngine\Program.cs:line 94<br/>
StackTrace : at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at IncidentEmailEngine.Program.Main(String[] args) in c:\Dane\VS\IncidentEmailEngine\IncidentEmailEngine\Program.cs:line 94
Und erwähnte Ausnahme in der ersten Zeile ausgelöst. Das Problem ist, dass es eine Liste ist und daher sollte es mehr als ein Element enthalten.
Vielen Dank für Ihre Eingabe.
Auflösung:
Fehler in Zeile 95, als das Ergebnis der Abfrage mehr als einen Datensatz hatte. Umschreiben in:
var mailTo = db.DRAFT_DLs
.Where(dd => dd.MX_DL == argMailTo)
.Select(dd => new MailAddress(dd.EMAIL))
.ToList();
var mailCc = db.DRAFT_DLs
.Where(dd => dd.MX_DL == "ALL")
.Select(dd => new MailAddress(dd.EMAIL))
.ToList();
// ...
mailTo.ForEach(rcpt => mail.To.Add(rcpt));
mailCc.ForEach(rcpt => mail.CC.Add(rcpt));
löste das Problem. Immer noch nicht bekannt ist der Grund, warum Fehler auf eine andere harte Linie geworfen wurden.
string mailCc = db.DRAFT_DLs
.Where(dd => dd.MX_DL == "ALL")
.Select(dd => dd.EMAIL)
.SingleOrDefault() ?? "";
Wenn Sie Enumerable.SingleOrDefault
(oder Single
) Sie sagen verwenden, die keine oder eine Aufzeichnungen sind in Ordnung, aber mehr als eine ist außergewöhnlich:
Die Ausnahme bitte anzeigen – Serghei
Diese Ausnahme tritt normalerweise bei einem Aufruf von 'Single' auf, wenn die Sequenz mehr als ein Element enthält. Es ist schwer zu sehen, wie es aus dem Code in Ihrer Frage entstehen könnte. Stellen Sie eine [mcve] bereit. –
Brechen Sie die linq-Anweisung in eine Reihe von verschiedenen Anweisungen auf, rufen Sie nach jeder Anweisung .ToList() auf und geben Sie dann an, auf welche die Ausnahme angewendet wird. –