У меня была такая же проблема. Проблема в том, что вы не можете использовать методы расширения внутри отложенного выражения linq2sql. Это связано с тем, что при выполнении запроса поставщик IQueryable
пытается преобразовать все методы в дереве выражений в SQL. Он не может отличить ваш метод от тех, которые являются родными для linq2sql. Поэтому проблема.
Решение состоит в том, чтобы добавить метод в частичный класс, который будет расширять собственные классы linq2sql, а не в качестве метода расширения.
РЕДАКТИРОВАТЬ: Я добавляю предлагаемые изменения в код
public IQueryable<Models.Post> GetPosts()
{
var dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Post>(x => x.PostTags);
dataLoadOptions.LoadWith<PostTag>(x => x.Tag);
_sqlDatabase.LoadOptions = dataLoadOptions;
return from p in _sqlDatabase.Posts
select new Models.Post
{
PostId = p.PostId,
CommentList = p.GetCommentList(),
< ... more stuff snipped ... >
TagList = (from t in p.PostTags
select t.Tag.Description).ToListIfNotNullOrEmpty()
};
}
Я бы тогда имел GetCommentList()
метод в частичном классе
public partial class Post
{
public List<Comment> GetCommentList()
{
List<Commment> resultList = from this.Comments etc...
< ... put the select code here ... >
if(resultList.Count > 0)
return resultList;
return null;
}
}