Невозможно привести объект типа 'System.Linq.Expressions.FieldExpression' - PullRequest
3 голосов
/ 19 августа 2011

Я использую LinqKit.dll , чтобы выполнить Linq To Entity в моем приложении следующим образом:

qry = _articleRepo.GetItemsByCulture(Thread.CurrentThread.CurrentCulture.Name)
                                .AsExpandable().Where(x => x.Approved && isInCategory(x.CategoryID, category.CategoryID));

 Func<string, int, bool> isInCategory = (x, y) =>
            {
                IQueryable<string> list = x.Split(',').AsQueryable();

                //Except 
                //x.Except(_);

                return list.Any(z => z == y.ToString());
            };

выдает ошибку:

System.InvalidCastException: невозможно преобразовать объект типа «System.Linq.Expressions.FieldExpression» для ввода 'System.Linq.Expressions.LambdaExpression'.

, но удаление isInCategory (x.CategoryID, category.CategoryID) приводит к тому, что приложение запускается без проблем.

Пожалуйста, помогите мне?

1 Ответ

1 голос
/ 19 августа 2011

Хорошо, после просмотра кода в комментариях я могу предложить следующее: Заменить string CategoryID на Статье на public virtual ICollection<Category> Categories { get; set; }, чтобы EF создала внешний ключ.Затем, чтобы получить статьи, относящиеся к определенной категории, вы можете использовать код, подобный следующему:

var articlesInCategory = context.Articles
            .Where(x => x.Language == Thread.CurrentThread.CurrentCulture.Name)
            .Where(x => x.Approved && x.Categories.Any(c => c.CategoryID == c1.CategoryID)).ToList();

А когда вы хотите создавать новые статьи, вы должны использовать что-то вроде:

var c1 = context.Categories.OrderBy(c => c.Title).First();
var c2 = context.Categories.OrderBy(c => c.Title).Skip(1).First();
context.Articles.Add(new Article { Categories = new Collection<Category> { c1, c2 } });
context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...