1

我是 Linq 的新手,以下查询不断返回“无法识别 System.DateTime”错误。我试过 Parse 和 Convert 都没有。这是我的查询:

mrcEntities 上下文 = GetContext();

        var query = from c in context.tblClients
                    where (c.FirstName != null || c.LastName != null)
                       && c.EligibilityDate >= DateTime.Parse("10/01/2011")
                       && c.EligibilityDate <= DateTime.Parse("04/30/2012")
                      orderby c.ClientID
                    select new
                    {
                        ClientID = c.ClientID,
                        FirstName = c.FirstName,
                        LastName = c.LastName,
                        MiddleName = c.MidName,
                        SSN = c.SSN,
                        DOB = c.DOB,
                        Sex = c.Gender,
                        Ethnic = c.EthnicCode
                    };

        clientRowCnt = query.Count();

任何帮助,将不胜感激。

4

2 回答 2

6

这是因为 EF 无法将 DateTime.Parse 转换为商店中可用的函数。如果您替换对 DateTime.Parse() 的调用结果并在查询中使用这些变量,它应该可以正常工作。

var from = DateTime.Parse("10/01/2011");
var to = DateTime.Parse("04/30/2012");
var query = from c in context.tblClients
                    where (c.FirstName != null || c.LastName != null)
                       && c.EligibilityDate >= from
                       && c.EligibilityDate <= to
                      orderby c.ClientID
                    select new
                    {
                        ClientID = c.ClientID,
                        FirstName = c.FirstName,
                        LastName = c.LastName,
                        MiddleName = c.MidName,
                        SSN = c.SSN,
                        DOB = c.DOB,
                        Sex = c.Gender,
                        Ethnic = c.EthnicCode
                    };

        clientRowCnt = query.Count();
于 2012-04-30T13:57:28.690 回答
3

只需解析查询之外的日期。或者使用构造函数来创建日期,甚至不解析它(你已经知道它看起来的值。

DateTime start = DateTime.Parse("10/01/2011");
DateTime emd = DateTime.Parse(04/30/2012);

var query = from c.....

或使用:

DateTime start = new DateTime(2011, 10, 01);
DateTime end = new DateTime(2012, 04, 30);

var query = from c.....

您还可以安全地解析查询的投影部分中的字符串,因为该部分是在检索数据后在客户端执行的。所以

var query = from c...
select
    new {
        EligibilityDate = Datetime.Parse(c.EligibilityDate)
    }

只有在选择条件中需要解析值时,才需要将其作为 DateTime 值提供。

到目前为止,更好的解决方案是修复数据库模式,或者甚至只是将计算列添加到现有模式中,该模式在服务器上进行解析并公开正确的类型列。

于 2012-04-30T13:57:36.740 回答