gpt4 book ai didi

linq - LinQ 中的动态列名

转载 作者:行者123 更新时间:2023-12-04 10:17:59 25 4
gpt4 key购买 nike

我有一个类项目。

class Item{
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public string Name { get; set; }
public string Description { get; set;}
}

我想根据动态列名过滤项目列表。
假设我想要名称列表,那么列名称是“名称”,结果将是名称列表
如果列名是描述,我需要描述列表。

如何用 LinQ 做到这一点?

最佳答案

很简单,只需从列表中选择您需要的属性:

var items = new List<Item>();
//get names
var names = items.Select(x => x.Name);
//get descriptions
var descriptions = items.Select(x => x.Description);

更新:

你需要一些反射(reflection)才能做到这一点:
var names = items.Select(x => x.GetType().GetProperty("Name").GetValue(x));

将其放入可重用的方法中:
public IEnumerable<object> GetColumn(List<Item> items, string columnName)
{
var values = items.Select(x => x.GetType().GetProperty(columnName).GetValue(x));
return values;
}

当然,这并不能验证该列是否存在于对象中。所以它会抛出一个 NullReferenceException当它没有的时候。它返回一个 IEnumerable<object> ,因此您必须调用 ToString()之后在每个对象上获取值或调用 ToString()GetValue(x) 之后的查询中:
public IEnumerable<string> GetColumn(List<Item> items, string columnName)
{
var values = items.Select(x => x.GetType().GetProperty(columnName).GetValue(x).ToString());
return values;
}

用法:
var items = new List<Item>(); //fill it up
var result = GetColumn(items, "Name");

关于linq - LinQ 中的动态列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24732724/

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