gpt4 book ai didi

c# - 序列包含多个元素 - 而它应该包含多个

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:38 25 4
gpt4 key购买 nike

我知道“序列包含多个元素”这一主题之前已在此处介绍过,但我找不到任何适用于我的情况的内容。
这是代码:

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);

完整的错误信息:

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

并在第一行抛出提到的异常。问题是它是一个列表,因此它应该并且包含多个元素。

感谢您对此的投入。
分辨率:
错误在第 95 行,因为查询的结果不止一条记录。将其重写为:

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));

解决了这个问题。仍然不知道错误在不同的线路上抛出的原因。

最佳答案

它不是在第一行而是在第二行:

string mailCc = db.DRAFT_DLs
.Where(dd => dd.MX_DL == "ALL")
.Select(dd => dd.EMAIL)
.SingleOrDefault() ?? "";

如果您使用 Enumerable.SingleOrDefault (或 Single)你说零个或一个记录是可以的,但多于一个是异常(exception)的。这就是你得到异常(exception)的原因。对于 Single 零也是异常(exception)。也许您想使用 FirstOrDefault :

string mailCc = db.DRAFT_DLs
.Where(dd => dd.MX_DL == "ALL")
.Select(dd => dd.EMAIL)
.FirstOrDefault() ?? "";

关于c# - 序列包含多个元素 - 而它应该包含多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com