Formatting Select Statement Using Dynamic Linq

c# dynamic-linq entity-framework linq sql-server

Question

I've been looking into this for quite some time now and cannot figure out a resolution. I Originally Tried formatting A dynamic linq Statement as you can see here in this post

I declared a class:

public class DynamicHelper
{
    public string FormattedLink(string DisplayText, string ID)
    {
        return "<a href='/Title/Preview/'" + ID + ">" + DisplayText + "</a>";
    }

    public string FormattedLink(string DisplayText, int ID)
    {
        return "<a href='/Title/Preview/'" + ID + ">" + DisplayText + "</a>";
    }
}

After I inserted a new type in DynamicLinq into the predefinedTypes

,typeof(DynamicHelper) //around line 635

I have a program which is attempting to Invoke the FormattedLink inside of a dynamic linq select:

using (var Model = new MK3Entities())
{
    DynamicHelper Dh = new DynamicHelper();

    var TOrigin = (Model.Titles.Where("ID > 19632")
                               .Select("new(ID,  @0.FormattedLink(ExtTitleID, ID) as ExtTitleID )", Dh) as System.Collections.IEnumerable)
                               .Cast<dynamic>().Take(10).ToList();

    Console.ReadKey();
} 

When I execute this program I get a runtime exception "LINQ to Entities does not recognize the method 'System.String FormattedLink(System.String, Int32)' method, and this method cannot be translated into a store expression."

Any Ideas on how to fix this... I just need simple formatting from Dynamic Select.

1
0
5/23/2017 12:05:51 PM

Accepted Answer

The error message is pretty self explanatory. The database doesn't know how to translate that method into SQL. You need to fetch the information that the method needs in your database query and then call that function on the results, rather than in the query.

1
10/22/2014 8:26:12 PM

Popular Answer

I just solved similiar problem few hours back.

YOu need ToList() that works with Dynamic linq. Check out this thread: Can't find property or field on a dynamic object

Just copy paste those to your project, and later:

var TOrigin = (Model.Titles.Where("ID > 19632")
                    .ToAnonymousList()
                    .Select("new(ID,  @0.FormattedLink(ExtTitleID, ID) as
                         ExtTitleID )", Dh) as System.Collections.IEnumerable);


Related Questions





Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow