rasputino
rasputino

Reputation: 799

LINQ to Entities does not recognize the method 'StaticMethod' method

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?

Upvotes: 0

Views: 234

Answers (1)

Stewart Ritchie
Stewart Ritchie

Reputation: 926

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();
}

Upvotes: 1

Related Questions