0

I have a code like this:

using (var ws = new WebService())
using (var db = new EntityFrameworkModel())
{
    var originalFolders = ws.GetFolders();
    foo.folders = originalFolders.Select(c => new FolderType()
    {
        Id = c.Description,
        Items = ws.ListDocs(c.Id)
        .Select((d, i) =>
            new DocType()
            {
                Id = StaticMethod(d, c),
                Order = i,
                SomeValue = db.docs.Single(doc => doc.Id == StaticMethod(d, c)).SomeValue
            }
        ).ToArray()
    }).ToArray();
}

But I get a "LINQ to Entities does not recognize the method 'StaticMethod' method, and this method cannot be translated into a store expression" exception. Does exist any way to pass a static value as a parameter? Something like this:

using (var ws = new WebService())
using (var db = new EntityFrameworkModel())
{
    var originalFolders = ws.GetFolders();
    foo.folders = originalFolders.Select(c => new FolderType()
    {
        Id = c.Description,
        Items = ws.ListDocs(c.Id)
        .Select((d, i, string myValue = StaticMethod(d, c)) =>
            new DocType()
            {
                Id = myValue,
                Order = i,
                SomeValue = db.docs.Single(doc => doc.Id == myValue).SomeValue
            }
        ).ToArray()
    }).ToArray();
}

I can't modify DocType class constructor. Does exist any way?

Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
rasputino
  • 691
  • 1
  • 8
  • 24
  • Does ws.ListDocs(c.Id) return IQueryable. If so add AsEnumerable() function to it. Check this [post](https://stackoverflow.com/questions/5845993/linq-to-entities-doesnt-recognize-a-method) – neelesh bodgal Jun 10 '20 at 12:01

1 Answers1

1

Usually this is a matter of making sure you don't inline functions in linq-to-SQL expressions that can't be turned into valid SQL.

Try this:

using (var ws = new WebService())
using (var db = new EntityFrameworkModel())
{
    var originalFolders = ws.GetFolders();
    foo.folders = originalFolders.Select(c => new FolderType()
    {
        Id = c.Description,
        Items = ws.ListDocs(c.Id)
        .Select((d, i) =>
        {
            var id = StaticMethod(d, c);

            return new DocType()
            {
                Id = id,
                Order = i,
                SomeValue = db.docs.Single(doc => doc.Id == id).SomeValue
            };
        }).ToArray()
    }).ToArray();
}
Stewart Ritchie
  • 926
  • 7
  • 13