C# 在C中使用表达式的导航属性的动态LINQ OrderBy#

C# 在C中使用表达式的导航属性的动态LINQ OrderBy#,c#,linq,sorting,linq-to-sql,iqueryable,C#,Linq,Sorting,Linq To Sql,Iqueryable,我有两张桌子,即学生桌和马克桌 表:DbSet 表:DbSet LINQtoSQL返回以下列表 StudentId Name Subject Score _____________________________________ 1 Ram GK 90 1 Ram SCI 97 2 Kumar GK 81 2 Kumar SC

我有两张桌子,即学生桌和马克桌

表:
DbSet

表:
DbSet

LINQtoSQL返回以下列表

StudentId    Name    Subject    Score  
_____________________________________
1            Ram    GK         90
1            Ram    SCI        97
2            Kumar  GK         81
2            Kumar  SCI        99
3            John   null       null
C#代码是

使用(var db=new StudentEntity()){
var query=db.Student.Where(m=>true);
表达式sortExpression=null;
如果(sortColumn==“名称”){
sortExpression=i=>i.名称
}else if(sortColumn==“主题”){
//?如何做到这一点
}
查询=isAcending
?query.OrderBy(sortExpression)
:query.OrderByDescending(sortExpression);
Select(m=>(…).Dump();
}
变量
sortColumn
是一个
字符串
,用于指定需要排序的列;变量
isAcending
是一个
bool
,用于指定排序方向


我需要对主题栏进行排序。请帮助我如何编写
表达式
,查询应该是
IQueryable

与您编写lambda的方式完全相同:

Expression<Func<StudentInfo,object>> sortExpression = si=>si.Name;

正是你写lambda的方式:

Expression<Func<StudentInfo,object>> sortExpression = si=>si.Name;

您可以将字符串传递给OrderBy方法, 差不多

“colName ASC、anotherCol Desc等…”

你可以这样做

string orderstring=sortColumnName++(isAcending???“ASC”:“DESC”);

query=query.OrderBy(orderstring)

您可以将字符串传递给OrderBy方法, 差不多

“colName ASC、anotherCol Desc等…”

你可以这样做

string orderstring=sortColumnName++(isAcending???“ASC”:“DESC”);

query=query.OrderBy(orderstring)

排序时不需要直接使用表达式。只需使用query.OrderBy(x=>x.Subject);次要迂腐点:升序中有一个
s
。排序时不需要直接使用表达式。只需使用query.OrderBy(x=>x.Subject);次要迂腐点:升序中有一个
s
。仅供参考,模型
StudentInfo
是一个实体框架模型类,它与第一个表相关联。导航属性的工作方式类似于“左外部联接”(即分数表)。我更新了问题。仅供参考,模型
StudentInfo
是一个实体框架模型类,它与第一个表相关联。导航属性的工作方式类似于“左外部联接”(即分数表)。我更新了问题。
using(var db = new StudentEntity()) {
    var query = db.Student.Where(m => true);

    Expression<Func<StudentInfo,object>> sortExpression = null;

    if(sortColumn == "Name") {
        sortExpression = i => i.Name
    } else if(sortColumn == "Subject") {
        // ? How to achieve this
    }

    query = isAcending
                ? query.OrderBy(sortExpression)
                : query.OrderByDescending(sortExpression);

    query.Select(m => (...)).Dump();
}
Expression<Func<StudentInfo,object>> sortExpression = si=>si.Name;
 db.Mark.Select(m=> new StudentInfo {
                    StudentID = m.StudentId, 
                    Name = m.Student.Name,
                    Subject = m.Subject,
                    Score = m.Score});

Expression<Func<StudentInfo, object>> sortExpression = null;

if (sortColumn == "Name")
{
    sortExpression = i => i.Name;

}
else if (sortColumn == "Subject")
{
    sortExpression = i => i.Subject;
}

    query = isAcending
                ? query.OrderBy(sortExpression)
                : query.OrderByDescending(sortExpression);

    return query;