【发布时间】:2019-03-31 19:26:43
【问题描述】:
假设我有以下类结构
public class EmailActivity {
public IEnumerable<MemberActivity> Activity { get; set; }
public string EmailAddress { get; set; }
}
public class MemberActivity {
public EmailAction? Action { get; set; }
public string Type { get; set; }
}
public enum EmailAction {
None = 0,
Open = 1,
Click = 2,
Bounce = 3
}
我希望根据MemberActivity 的存在过滤EmailActivity 对象列表,其中非空EmailAction 匹配提供的EmailAction 匹配列表。我只想将 EmailAddress 属性返回为List<string>。
这是我所知道的
List<EmailAction> activityTypes; // [ EmailAction.Open, EmailAction.Bounce ]
List<string> activityEmailAddresses =
emailActivity.Where(
member => member.Activity.Where(
activity => activityTypes.Contains(activity.Action)
)
)
.Select(member => member.EmailAddress)
.ToList();
但是我收到一条错误消息“CS1503 参数 1:无法从 'EmailAction 转换?'到“电子邮件操作””
如果然后修改activityTypes 以允许空值List<EmailAction?> 我得到以下“CS1662 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型”。
问题是嵌套的.Where 返回一个列表,但父级.Where 需要一个布尔结果。我该如何解决这个问题?
我意识到我可以使用嵌套循环,但我正在努力提高我的 C# 技能!
【问题讨论】: