3

I am getting the following exception: LINQ to Entities does not recognize the method 'Int64 ToInt64(System.String)' method, and this method cannot be translated into a store expression.

I had long.Parse(ProjectID.ToString()) and I see the suggestion was to use Convert.ToInt64 but I am still getting the same exception

string projID = ProjectFileID.ToString();

            var d = (from f in context.FileInfo
                     where f.ID == Convert.ToInt64(projID)
                     select (f));
Nick LaMarca
  • 8,076
  • 31
  • 93
  • 152
  • possible duplicate of http://stackoverflow.com/questions/1066760/problem-with-converting-int-to-string-in-linq-to-entities – Mike Goodwin Apr 10 '12 at 19:44

2 Answers2

13

Just do the conversion outside the query, so you compare the results directly to a variable of type long:

// TODO: Error handling
long projID = Convert.ToInt64(ProjectFileID.ToString());

var d = (from f in context.FileInfo
         where f.ID == projID
         select (f));

Also, given that you're calling ToString() on ProjectFileID, can you maybe just cast it instead, since it certainly seems like it's an int or something along those lines.

dlev
  • 48,024
  • 5
  • 125
  • 132
0

The reason is that it tries to do the conversion inside the query itself and the behind the scenes SQL has no definition for that Extension. The workaround is doing the conversion to long outside of the query (to a temp variable) and passing that in to the LINQ.

Isaac Levin
  • 2,809
  • 9
  • 49
  • 88