场景:
class Job 可以有多个Task,每个Task 可以有多个Charge。我想要做的是获取任何特定工作的所有 Charge 列表。下面是我目前用来解决这个问题的代码。但我觉得这不是最好的解决方案(因为它使用的循环很少)。谁能建议我如何使用 Linq/Lambda 表达式来做到这一点?谢谢。
代码:
//Model Class
public class Job
{
public int id { set; get; }
public List<Task> Tasks { set; get; }
}
public class Task
{
public int id { set; get; }
public List<TaskCharge> TaskCharges { set; get; }
}
public class TaskCharge
{
public int id { set; get; }
public decimal Amount { set; get; }
public DateTime DateAdded { set; get; }
}
// Method to GetTransactions
public void GetTransactions()
{
var transactions = new List<Transaction>();
if (job.Tasks != null && job.Tasks.Any())
{
foreach (var task in job.Tasks)
{
if (task.TaskCharges != null && task.TaskCharges.Any())
{
foreach (var tc in task.TaskCharges)
{
if (tc.IsAccepted)
{
transactions.Add(new Transaction
{
//assign properties like below
//Description = tc.Description,
//TransactionAmount = tc.Amount
//and so on
});
}
}
}
}
}
}
这个怎么样?
var tasks = job.Tasks ?? Enumerable.Empty<Task>();
var transactions = tasks
.Where(t => t.TaskCharges != null)
.SelectMany(t => t.TaskCharges)
.Where(tc => tc.IsAccepted)
.Select(tc => new Transaction(...));
我是一名优秀的程序员,十分优秀!