c# - 将 foreach 转换为 LINQ 以进行练习和学习

标签 c# linq

这段代码是我写的。有用。它易于阅读且易于调试。 然而,为了今天几个小时的学习目的,我尝试使用 JOINGroupJoin 或类似的东西将其转换为某种 LINQ。因为如果你看一下 WHERE 子句,我的直觉告诉我我可以通过某种 JOIN 来做到这一点,并摆脱 foreach 但是好吧,我想不出那种语法。

所以我想看看你是否可以帮我这样重写?

foreach (var f in myData)
{
    var res = new FinalClass
    {
        ID = f.ID,
        Floor = f.Floor,
        Description = f.Description
    };

    var setOne = setOneDataList.Where(b => b.FieldID == f.ID).Select(t => new CommonClass
    {
        FieldName = t.Field,
        Color = t.Color,
        Status = t.Status
    }).OrderBy(b => b.FieldName);

    var setTwo = setTwoDataList.Where(f => f.FieldID == f.ID).Select(t => new CommonClass
    {
        FieldName = t.Field,
        Color = t.Color,
        Status = t.Status
    }).OrderBy(b => b.FieldName);


    res.SetOne = setOne;
    res.SetTwo = setTwo;   

    result.Add(fs);
}

最佳答案

我花了很长时间,我看到有人已经粘贴了答案:)

但我会提交我的,因为我建议使用“每行一个 .”方法来编写 LINQ。您不认为这样更具可读性吗?

myData.Select(f => new FinalClass
{
    ID = f.ID,
    Floor = f.Floor,
    Description = f.Description,
    SetOne = setOneDataList
        .Where(b => b.FieldID == f.ID)
        .Select(t => new CommonClass
        {
            FieldName = t.Field,
            Color = t.Color,
            Status = t.Status
        })
        .OrderBy(b => b.FieldName),
    SetTwo = setTwoDataList
        .Where(f => f.FieldID == f.ID)
        .Select(t => new CommonClass
        {
            FieldName = t.Field,
            Color = t.Color,
            Status = t.Status
        })
        .OrderBy(b => b.FieldName),
};

关于c# - 将 foreach 转换为 LINQ 以进行练习和学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77197829/

相关文章:

c# - 使用循环转换此 linq 表达式

c# Fluent SQL Helper - 语法改进

c# - .NET 应用程序不想运行

javascript - 合并来自用户控件的 pageLoad() 代码?

C# void ReceiveData(IAsyncResult iar)

c# - LINQ 冲突 - 行未找到或未更改

c# - c#中不知道key的情况下读取json

c# - 如何测试我的 Linq IQueryable 是否已执行

c# - Linq 查询,如何检查空值并使用值 0 代替空值?

linq - LINQ 与 foreach 迭代器 block 的 C# 性能