LINQ to Entities does not recognize the method 'System.DateTime Parse(System.String)' method

前端 未结 2 887
-上瘾入骨i
-上瘾入骨i 2021-01-25 09:51

I\'m a newbie to Linq and the below query keeps returning \"does not recognize System.DateTime\" error. I\'ve tried Parse and Convert and neither works. Here\'s my query:

相关标签:
2条回答
  • 2021-01-25 10:37

    It's because EF can't turn DateTime.Parse into a function available on the store. If you replace the results of the calls to DateTime.Parse() and use those variables in your query it should work fine.

    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();
    
    0 讨论(0)
  • 2021-01-25 10:45

    Just parse the date outside of your query. Or use the constructor to create the date without even parsing it (you know the values already it seems.

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

    Or use:

    DateTime start = new DateTime(2011, 10, 01);
    DateTime end = new DateTime(2012, 04, 30);
    
    var query = from c.....
    

    You can also safely parse the string in the projection part of your query, since that part is executed on the client side after the data has been retrieved. so

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

    It's only when the parsed value is needed in the selection criteria, when you need to supply it as a DateTime value.

    A better solution, by far, is to fix the database schema, or even just add a calculated column to the existing schema which does the parsing on the server and exposes the correct Typed column.

    0 讨论(0)
提交回复
热议问题