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;