【发布时间】:2014-10-27 06:16:57
【问题描述】:
我正在做一个项目,我正在将 Linq 转换为 SQL(我承认我对它的理解很差)到 Linq 到 Entity 并且遇到了一个奇怪的情况。下面的代码在针对 Linq to SQL 设计器中生成的类进行评估时正确返回结果,但在针对实体框架实体运行时不起作用。具体来说,如果 Or 子句中的任何属性为空,则该过程会因空引用异常而中断。我已经尝试过检查 null 属性的技术,然后说,传递一个我知道不能在 SearchTerm 中的值以绕过它,但它们只会导致这个 LINQ 以我不这样做的方式从实体返回所有结果也不是很明白。
Return (From values In Location.getData _
Where (values.LocName.Contains(SearchTerm) _
Or values.Address.Contains(SearchTerm) _
Or values.Address2.Contains(SearchTerm) _
Or values.City.Contains(SearchTerm) _
Or values.State.Contains(SearchTerm) _
Or values.QIM.Contains(SearchTerm) _
Or values.MacID.Contains(SearchTerm) _
Or values.Phone.Contains(SearchTerm) _
Or values.PrimServ.Contains(SearchTerm) _
Or values.Zip.Contains(SearchTerm) _
Or values.Area.Contains(SearchTerm) _
Or values.Type.Contains(SearchTerm)
) And (values.Status <> "Closed" Or status_parm = "Closed")
Select values)
正如您可能猜到的那样,实体类 Location 上的 getData 方法基本上是使用 DbContext.SqlQuery 构造对数据库的查询,然后使用此 LINQ 过滤结果。我知道这有几个问题使它不太理想,但是在我开始转换之前以这种方式编写的原因是不容易改变的。
【问题讨论】:
标签: linq linq-to-sql linq-to-entities