使用 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 做到这一点。
将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);