gpt4 book ai didi

c# - 使用 LINQ 列出(和返回)的列

转载 作者:行者123 更新时间:2023-11-30 20:53:56 24 4
gpt4 key购买 nike

我有一个包含列“Col1”、“Col2”、“Col3”等的记录的 SQL 表......所有都是相同的类型(并且是相同的“事物”)

表和这些列之间的关系本质上是一对多的。我可以创建另一个表并给出它们之间的关系,但我有许多不相关的表,它们都包含“Col1”、“Col2”、“Col3”等...,这需要我多次复制表。

我需要一种方法将这些列转换为列表,并将列表元素放回列中。数据的顺序无关紧要。如果“Col1”包含A,“Col2”包含B,则更新后“Col1”包含B,“Col2”包含A是可以的。

我画了一张漂亮的图作为说明

enter image description here

一种非常丑陋的方法,可以将数据放回原处。

int fieldCount = 0;
foreach (string field in MyList)
{
switch (fieldCount++)
{
case 1:
entityObject.Col1 = field;
break;
case 2:
entityObject.Col2 = field;
break;
case 3:
entityObject.Col3 = field;
break;
case 4:
entityObject.Col4 = field;
break;
case 5:
entityObject.Col5 = field;
break;
}

}

最佳答案

你可以为此使用反射:

//replace object parameter with some base class if possible
public static List<string> GetColumnValues(object item)
{
return item.GetType().GetProperties()
.Where(prop => prop.Name.StartsWith("Col")
&& prop.PropertyType == typeof(string))
.Select(prop => prop.GetValue(item) as string)
.ToList();
}

然后你可以再次使用反射来设置它们:

//replace object parameter with some base class if possible
public static void GetColumnValues(object item, List<string> values)
{
foreach(var pair in item.GetType().GetProperties()
.Where(prop => prop.Name.StartsWith("Col")
&& prop.PropertyType == typeof(string))
.Zip(values, (prop, value) => new{prop,value})
{
pair.prop.SetValue(item, pair.value);
}
}

关于c# - 使用 LINQ 列出(和返回)的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531023/

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