gpt4 book ai didi

c# - 有没有一种有效的方法来用两个变量做一个选择语句?

转载 作者:太空狗 更新时间:2023-10-29 22:58:18 25 4
gpt4 key购买 nike

在我的 C# 代码中,我需要计算两个非空变量。我制定了一套 if-else if 语句,但在我看来它看起来很丑陋而且有点过于草率,即使它是正确的。

我查看了 MSDN Library并且只看到了基于单个变量的选择示例。

是否有更简洁、更紧凑的方式来实现相同的结果?

更新:我填写了代码以提供更多上下文。多看这个,或许我可以直接根据参数来操作linq查询。但是,我提出的问题我想关注的一般问题:选择,而不是做出选择后使用的代码。

public ActionResult Index(string searchBy, string orderBy, string orderDir)
{
var query = fca.GetResultsByFilter(searchBy);

if (orderBy == "Campus" && orderDir == "Asc")
{
query = query = query.OrderBy(s => s.Campus).ThenBy(s => s.Student_Name);
}
else if (orderBy == "Campus" && orderDir == "Desc")
{
query = query.OrderByDescending(s => s.Campus);
}
else if (orderBy == "Student Name" && orderDir == "Asc")
{
query = query = query.OrderBy(s => s.Student_Name);
}
else if (orderBy == "Student Name" && orderDir == "Desc")
{
query = query.OrderByDescending(s => s.Student_Name);
}
else if (orderBy == "Course Count" && orderDir == "Asc")
{
query = query.OrderBy(s => s.Course_Count);
}
else if (orderBy == "Course Count" && orderDir == "Desc")
{
query = query.OrderByDescending(s => s.Course_Count);
}
}

最佳答案

您可以在 IQueryable 上创建一个扩展方法用 OrderBy 处理订购或 OrderByDescending :

public static class QueryableExtensions
{
public static IOrderedQueryable<TSource> OrderByWithDirection<TSource,TKey>
(this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector,
string orderDir)
{
return orderDir == "Desc"
? source.OrderByDescending(keySelector)
: source.OrderBy(keySelector);
}
}

我假设您的 GetResultsByFilter方法返回 IQueryable<> .如果它实际上返回 IEnumerable<> ,那么扩展方法将需要采用 IEnumerable<TSource> source参数并返回 IOrderedEnumerable<TSource>相反。

然后可以按如下方式使用:

public ActionResult Index(string searchBy, string orderBy, string orderDir)
{
var query = fca.GetResultsByFilter(searchBy);

switch (orderBy)
{
case "Campus":
query = query.OrderByWithDirection(s => s.Campus, orderDir);
break;
case "Student Name":
query = query.OrderByWithDirection(s => s.Student_Name, orderDir);
break;
case "Course Count":
query = query.OrderByWithDirection(s => s.Course_Count, orderDir);
break;
}

if (orderBy == "Campus" && orderDir == "Asc")
{
// The Campus Asc case was also ordered by Student_Name in the question.
query = query.ThenBy(s => s.Student_Name);
}
}

关于c# - 有没有一种有效的方法来用两个变量做一个选择语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30959835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com