C# 使用Linq查看电子邮件类
具有以下类别:C# 使用Linq查看电子邮件类,c#,linq,list,C#,Linq,List,具有以下类别: [Serializable] public class EmailClass { public string from; public List<string> To; public List<string> CC; public string DisplayTo; public string Subject { get; set; } public int attachments; pu
[Serializable]
public class EmailClass
{
public string from;
public List<string> To;
public List<string> CC;
public string DisplayTo;
public string Subject { get; set; }
public int attachments;
public List<string> attachmentsName;
public string DateTimeReceived;
public string DateTimeSent;
public string FinalFilename;
public string DatetimeCreated;
public string ExchangeUniqueId;
public string ChankeyID;
public string FinalFileName {get;set;}
public bool Encrypted;
public string Descripcion { get; set; }
}
还有别的办法吗?。也许是另一个性能最好的?。会是什么
在一个字符串变量和几个列表变量内部搜索的最佳方法。我宁愿这样做
listado.Where(
l =>
l.from.Equals(textbox1.Text, StringComparison.OrdinalIgnoreCase) ||
l.To.Any((c) => c.Equals(textBox1.Text, StringComparison.OrdinalIgnoreCase) ||
l.CC.Any((s) => s.Equals(textBox1.Text, StringComparison.OrdinalIgnoreCase)
))).ToList();
StringComparison.OrdinalIgnoreCase
在比较时将忽略大小写,因此您不需要使用ToUpper。您的错误与<代码>包含使用字符串中的包含(不<代码>清单>代码>)当您考虑邮件时失败:
abc@mail.com
和aabc@mail.com
->aabc@mail.com包含abc@mail.com,当使用string.Equals时,它将根据需要返回false
编辑:
一艘班轮:
listado.Where(x =>
new List<string>{ x.from }.Union(x.To)
.Union(x.CC)
.Any(y => y.Equals(textbox1.Text,
StringComparison.OrdinalIgnoreCase)));
listado.Where(x=>
新列表{x.from}.Union(x.To)
.工会(x.CC)
.Any(y=>y.Equals)(textbox1.Text,
正常木素矿酶);
<代码>使用比较中的包含是一个坏主意,考虑这两个邮件:<代码>abc@mail.com
和aabc@mail.com
最好先准备好textBox1.Text.ToUpper()并将其存储在局部变量中。别忘了,每次都会创建一个新字符串。这一行行可以工作吗?因为from
是一个字符串(IEnumerable
),而To
&&CC
是列表
。那么,这个联合是否可以工作呢?错误CS1929:实例参数:无法从'string'转换为'System.Linq.IQueryable',当然不会错过,我想(不知道为什么,这是一个列表()
)。更正,谢谢
listado.Where(x =>
new List<string>{ x.from }.Union(x.To)
.Union(x.CC)
.Any(y => y.Equals(textbox1.Text,
StringComparison.OrdinalIgnoreCase)));