2011-07-19 94 views
0

您好我使用LINQ和EF 4.与排序依据

LINQ的帮助下,我有这个疑问,但似乎不能够通过一个字符串变量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(); 
+0

在哪里呢“吧。”来自?我只看到c,a和ü – dknaack

+0

对于IT我的意思是c属性。例如:c.Tile或c.Description。 – GibboK

回答

0

orderby要求指定成员。在你的情况 - orderby c(?).Titile而不是ordeby(string)。看来你必须使用表达式树(动态LINQ)来创建所需的查询。

+0

你能给我一个动态的LINQ查询例子吗? – GibboK

+0

看看http://www.singingeels.com/Blogs/Nullable/2008/03/26/Dynamic_LINQ_OrderBy_using_String_Names.aspx – Nagg

1

可以acheive你想要什么样的以下内容:

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:其更新为更简单的