Linq帮助OrderBy

时间:2011-07-19 08:16:38

标签: linq entity-framework

您好我使用Linq和EF 4。

我有这个查询,但似乎无法通过字符串变量sortExpression对结果进行排序。 我想我在"it."部分做错了。 注意:sortExpression可能有Title

请你看看我的语法有什么问题?谢谢你的帮助

               var myContentsForAuthor = from c in context.CmsContents
                                          join a in context.CmsAuthors on c.AuthorId equals a.AuthorId
                                          join u in context.aspnet_Users on a.UserId equals u.UserId
                                          orderby("it." + sortExpression)
                                          where u.UserId == myUserGuid && c.IsDeleted == false && c.Title.Contains(nameSearchString)
                                          select c;
                return myContentsForAuthor.ToList();

3 个答案:

答案 0 :(得分:1)

你可以像下面那样实现你想要的东西:

var myContentsForAuthor = from c in context.CmsContents
                          join a in context.CmsAuthors on c.AuthorId equals a.AuthorId
                          join u in context.aspnet_Users on a.UserId equals u.UserId
                          where u.UserId == myUserGuid && c.IsDeleted == false && c.Title.Contains(nameSearchString)
                          select c;
if(sortExpression == 'Title')
{
  return myContentsForAuthor.Where(c => c.Title).ToList();
}

if(sortExpression == 'Author')
{
  return myContentsForAuthor.Where(c => c.Author.Name).ToList();
}

注意:始终将orderby放在查询的末尾。

编辑:我更新了代码 EDIT2:将其更新为更简单

答案 1 :(得分:0)

orderby需要指定成员。在您的情况下 - orderby c(?).Titile而非ordeby(string)。您似乎必须使用表达式树(动态LINQ)来创建所需的查询。

答案 2 :(得分:0)

您需要构建动态linq查询。请参阅此问题的答案How can I do an OrderBy with a dynamic string parameter?