实体框架4中的简单条件LINQ查询

GON*_*ale 10 .net c# linq entity-framework entity-framework-4

我最近将此代码迁移到Entity Framework 4,但它失败了.显然,如果status没有值,则返回所有匹配项,如果它的值匹配的话user.StatusID == 1.

return users.SingleOrDefault(
                user =>
                user.Username == username &&
                user.EncryptedPassword == password &&
                (!status.HasValue || user.StatusID == 1)
                );
Run Code Online (Sandbox Code Playgroud)

返回异常:

ArgumentException: The specified value is not an instance of type 'Edm.Int32'
Parameter name: value
Run Code Online (Sandbox Code Playgroud)

但是,删除条件测试,它工作正常:

return users.SingleOrDefault(
                user =>
                user.Username == username &&
                user.EncryptedPassword == password &&
                user.StatusID == 1
                );
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?你如何在EF 4中进行条件测试?如果线条肯定不分开?

我在Linq to Sql中一次又一次地使用这些条件测试; 为什么这在EF 4中不起作用真的很奇怪.必须有一些简单的错误,也许在EF 4.0中有一种推荐的替代方法.

谢谢你的帮助,
格雷厄姆

GON*_*ale 5

好吧,我通过两件事的组合来解决它.

  1. 做一个简单的空测试.
  2. 使用方法测试本地强制转换status变量..Value

两者都必须到位,否则它将继续失败并出现错误!测试value属性会很不错,但我想查询必须非常简单 - 非常有趣!

return users.SingleOrDefault(
                user =>
                user.Username == username &&
                user.EncryptedPassword == password &&
                (status == null || user.StatusID == (int) status)
                );
Run Code Online (Sandbox Code Playgroud)

我会等待任何更好的实施,否则接受我自己的答案.但感谢大家的帮助.