在 LINQ 中使用字典键作为字段名称

本文关键字:字段 字典 LINQ | 更新日期: 2023-09-27 17:56:56

所以,我想在C#做一个报告。

首先,我使用 LINQ 加载数据:

 var query = (from c in customer
                where c.id.Equals(customer_id)
                orderby c.id
                select c).FirstOrDefault();

然后,我使dictionary包含数据库中的字段名称和标签。

 Dictionary<string, string> list = new Dictionary<string, string>();
            list.Add("name", "Full Name");
            list.Add("address", "Address");
            list.Add("phone", "Customer Phone");
            list.Add("email", "Customer Email");

基本上我想迭代整个dictionary并使用key作为字段名称标识符:

foreach (var pair in list)
            {
                graphic.DrawString(pair.Value, font, brush, startX, startY + offset);
                graphic.DrawString(":", font, brush, semicolonPos, startY + offset);
                graphic.DrawString(query.[pair.Key], font, brush, semicolonPos, startY + offset); // This is not working, any suggestion?
                offset += 40;
            }

所以我的问题是,是否有可能有类似**query.[pair.Key]**的东西,或者你对这个案子有什么建议吗?

我基本上是一个PHP程序员,所以也许我的心态仍然是网络编程:D。对不起,如果我的问题令人困惑。

在 LINQ 中使用字典键作为字段名称

foreach (var pair in list)
{
    graphic.DrawString(pair.Value, font, brush, startX, startY + offset);
    graphic.DrawString(":", font, brush, semicolonPos, startY + offset);  
    var pi=typeof(Customer).GetProperty(pair.key);
    var val= pi.GetValue(query,null);
    graphic.DrawString(val, font, brush, semicolonPos, startY + offset);
}

您可以使用 pair。键而不是查询。[对。键]

 graphic.DrawString(pair.Key , font, brush, semicolonPos, startY + offset);query.[pair.Key]

您尝试执行的操作并不是特别最佳实践,因为它使用魔术字符串来尝试访问客户对象的属性值。您也没有任何关注点分离 - 视图与数据访问等混合在一起。

您尚未显示"客户"变量的类型,但理想情况下,您将具有Customer类型,然后您的"视图"将以强类型方式访问属性。如果您描述您正在使用的 UI 技术,我可以添加一个示例。