用于包含列的 LINQ SELECT 中的 IF 语句

Mar*_*aro 6 c# linq select properties dynamic

是否可以在 linq Select 中包含或排除列?

var numberOfYears = Common.Tool.NumberOfYear;
 var list = users.Select(item => new
        {
            Id = item.Id,
            Name= item.Name,
            City= Item.Address.City.Name,
            STATUS = Item.Status,
            if(numberOfYears == 1)
            {
               Y1 = item.Records.Y1,
            }
            if(numberOfYears == 2)
            {
               Y1 = item.Records.Y1,
               Y2 = item.Records.Y2,
            }
            if(numberOfYears == 3)
            {
               Y1 = item.Records.Y1,
               Y2 = item.Records.Y2,
               Y3 = item.Records.Y3,
            }
        }).ToList();
    }
Run Code Online (Sandbox Code Playgroud)

这个想法是我只想在有值时才显示 Y1,Y2,Y3

Pio*_*ski 5

感谢dynamic关键字的美妙之处,您现在可以在 C# 中实现所需的功能。下面是一个例子:

public class MyItem
{
    public string Name { get; set; }
    public int Id { get; set; }
}

static void Main(string[] args)
{
    List<MyItem> items = new List<MyItem>
    {
        new MyItem
        {
            Name ="A",
            Id = 1,
        },
        new MyItem
        {
            Name = "B",
            Id = 2,
        }
    };

    var dynamicItems = items.Select(x => {
        dynamic myValue;
        if (x.Id % 2 == 0)
            myValue = new { Name = x.Name };
        else
            myValue = new { Name = x.Name, Id = x.Id };

        return myValue;
    }).ToList();
}
Run Code Online (Sandbox Code Playgroud)

这将返回动态对象的列表。一种具有 1 个属性,一种具有 2 个属性。