【发布时间】:2021-08-16 16:22:46
【问题描述】:
我在我的代码中使用 Linq to Sql 和方法语法从数据库中查询所有表。而且我今天遇到了一个奇怪的异常,这是我开始使用L2S以来第一次出现错误。
数据库表中有两列。 而“状态”一栏是映射到枚举类型的程序:1(Free),2(Loan)。
。定义表类
private string Type;
private byte Status;
。查询码
string _qNote = string.Empty;
string _qStatus = string.Empty;
List<DefineTableClass> _List = _dbObj.Table.Select(_obj => _obj)
.Where(_obj =>
(string.IsNullOrWhiteSpace(_qNote) || _obj.Note == _qNote)
&& (string.IsNullOrWhiteSpace(_qStatus) || Convert.ToInt32(_obj.Status) == Convert.ToInt32(_qStatus))
).ToList();
异常发生在
Convert.ToInt32(_obj.Status) == Convert.ToInt32(_qStatus)
我想知道这条线应该在
(string.IsNullOrWhiteSpace(_qStatus)
由于 _qStatus 为 Empty,不应进行下一次检查。
【问题讨论】:
-
最可能的原因是
string.IsNullOrWhiteSpace不是Linq to SQL 支持的函数。试试string == "" || string == null -
Convert.ToInt32(_obj.Status)也可能不受支持。您可以做的是尝试通过调用 ToList() 将 Linq to SQL 查询的结果具体化到列表中,然后将您的 Select 应用于结果列表; Linq to Objects 支持您尝试调用的所有方法。 -
@RobertHarvey 我确信 Linq to SQL 支持这两个功能。因为我有其他查询也是用这种方式从数据库中查询的,而且有效。
-
然后编辑您的问题以包含有效查询和无效查询之间的差异。
标签: c# linq lambda linq-to-sql linq-method-syntax