gpt4 book ai didi

lambda - 基于 lambda 表达式创建匿名类型

转载 作者:行者123 更新时间:2023-12-02 09:01:39 24 4
gpt4 key购买 nike

我正在尝试为 Winforms Datagrid 创建一个流畅的界面。这应该允许我使用类型化数据源并轻松使用属性的属性 (Order.Custom.FullName)

我在初始化时添加列并尝试设置要在此处使用的属性:

dgv.With<Order>().Column("Client Name").On(x => x.Client.FullName);

在设置数据源时,原来的问题就出现了:

dgv.SetTypedDatasource<T>(IList<Order> orders)

这里的一个大问题是通用控件是不可能的(我猜),因此不能为类指定 T,但必须为每个方法指定...

我想根据 lambda 表达式中的给定属性创建匿名类型列表:

类似于:

ProcessList<Client>(clientList, x => x.FullName);

是否可以做这样的事情:

[编辑]请注意,在实践中,表达式将提前设置,并将在其他地方获取...

public void ProcessList<T>(IList<T> sourceList, Expression<Func<T, object>> expression)
{
var list =
(from T x
in sourceList
select new { expression })
.ToList();

// process list .... grid.DataSource = list;
}

所以,我想根据给定的表达式创建匿名类型。我知道我可以评估该表达式以检索正确的属性。

我有点卡住了,这样的事情可能吗?

有什么想法吗?

最佳答案

好吧,通过简单地调用Select,您就可以非常接近:

ProcessList(clientList.Select(x => new { x.FullName }));

...

public void ProcessList<T>(IEnumerable<T> list)
{
// process list ... T will be an anonymous type by now
grid.DataSource = list;
}

(假设您也不需要 ProcessList 中的原始列表。如果需要,请将选择移到那里。)

关于lambda - 基于 lambda 表达式创建匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757905/

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