Я занимаюсь этим довольно долгое время и не могу найти решение. Я Первоначально Пробовал форматировать динамический оператор Linq, как вы можете видеть here в этом постеФорматирование инструкции выбора с использованием динамического Linq
Я объявил класс:
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>";
}
}
После того как я вставил новый тип в DynamicLinq в predefinedTypes
,typeof(DynamicHelper) //around line 635
У меня есть программа, которая пытается вызывать FormattedLink внутри динамического выбора linq:
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();
}
Когда я запускаю эту программу, я получаю исключение во время выполнения. «LINQ to Entities не распознает метод« System.String FormattedLink (System.String, Int32) », и этот метод не может быть переведен в выражение хранилища».
Любые идеи о том, как исправить это ... Мне просто нужно простое форматирование из Dynamic Select.
Это кажется логичным, он просто не имеет смысла, потому что я расширил библиотеку таким же образом, так что бы бы работа с функцией IList Содержит. Может быть, SQL как-то знает об этой функции, или LinqToEntities может найти способ ее перевести. Как вы предлагаете мне это исправить? –
@ johnny5 Вы не сможете найти способ для EF перевести его. Вам нужно выполнить функцию на стороне приложения после выполнения вашего запроса, как я сказал в своем ответе. – Servy
Entity Framework не поддерживает эту функцию. Он поддерживает конкатенацию. Возможно, вы знаете способ просто добавить некоторые данные к результатам, т.е. LinqToEntities поддерживает. .Select (t => new {FML = t.ExtTitleID + "EXTRATEXT"}) «Как я могу сделать это динамически, пожалуйста? –