使用 LINQ 查询时,类具有无效的表达式术语“from”

本文关键字:表达式 术语 from 无效 查询 LINQ 使用 | 更新日期: 2023-09-27 18:36:17

我有以下可序列化类:

[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; }
}

所以知道,我有一个列表,我想使用 Linq 查询它:

 var query = from p in listado 
             where p.from.ToString().ToUpper() == textBox1.Text

问题是它将p.from识别为来自标识符的 linq,因此它不被接受。

错误:表达式术语"from"无效

无法更改类公共字符串"from",因为它正在反序列化存储在硬盘中的 XML 对象。

如何解决此问题?

我知道我可以使用List.FindAll或类似的东西,但我真的会想知道我是否可以使用 linq 做到这一点。

使用 LINQ 查询时,类具有无效的表达式术语“from”

where p.from.ToString()更改为where p.@from.ToString() 。您同时使用from作为关键字和标识符。

David Arno 已经展示了如何通过 @from 避免与关键字冲突,但是:

我无法更改类公共字符串"from",因为它正在反序列化存储在硬盘中的 xml 对象。

作为替代方法:

[XmlElement("from")]
public string From {get;set;}

这告诉XmlSerializer如何映射名称;然后您可以使用:

var query = from p in listado 
            where p.From.ToUpper() == textBox1.Text

你可以改用方法链:

var query = listado.Where(p => p.from.ToString().ToUpper() == textBox1.Text);