我在C#中尝试了这个。
| ID|实体名称|实体_值|截面_组|文件编号|组别编号|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 1|d数量|小行星220059090|第1组|四十|0|
| 二|t日期|2022年12月6日|第1组|四十|0|
| 三|d数量|小行星220059090|第2组|四十|0|
| 四|t日期|2022年12月6日|第2组|四十|0|
| 五|公司|血压||四十|0|
Section_group为空的列应合并到分组结果中,Group_Id列应使用增量值进行更新。
我期待得到如下。
ENTITY_NAME ENTITY_VALUE SECTION_GROUP DOC_ID GROUP_ID
dNumber U220059090 GROUP 1 40 1
tDate 6-Dec-22 GROUP 1 40 1
sCompany bp 40 1
dNumber U220059090 GROUP 2 40 2
tDate 6-Dec-22 GROUP 2 40 2
sCompany bp 40 2
我创建了两个列表。第一个列表的section_group不为null,第二个列表的section_Group为null,并在第一个列表的section_group上应用了分组。
var itemSectionGroup = item.Where(x => !string.IsNullOrEmpty(x.Sectiongroup));
var itemSectionGroupNull = item.Where(x => string.IsNullOrEmpty(x.Sectiongroup)).ToList();
var group = itemSectionGroup.GroupBy(x => new { x.Sectiongroup });
int grp_num = 1;
foreach (var grp in group)
{
List<ParserRequestEntityLog> newList = itemSectionGroupNull.GetRange(0,itemSectionGroupNull.Count);
grp.ToList().ForEach(x => x.Groupid = grp_num);
newList.ToList().ForEach(x => x.Groupid = grp_num);
resultList.AddRange(grp.ToList());
resultList.AddRange(newList);
grp_num += 1;
}
由于引用类型,此代码的Group_Id被覆盖。我得到的是下面的错误。
ENTITY_NAME ENTITY_VALUE SECTION_GROUP DOC_ID GROUP_ID
dNumber U220059090 GROUP 1 40 1
tDate 6-Dec-22 GROUP 1 40 1
sCompany bp 40 2 <= this is getting overridden.
dNumber U220059090 GROUP 2 40 2
tDate 6-Dec-22 GROUP 2 40 2
sCompany bp 40 2
我正在寻找正确和有效的方法。
2条答案
按热度按时间rkue9o1l1#
你需要使用
AsNoTracking()
方法来避免它被覆盖。这里是工作演示,希望它能给予你一些帮助:型号
联系我们
演示:
stszievb2#
一个简单的方法是将其序列化并反序列化以避免引用:
var cloneGroupNull = JsonConvert.DeserializeObject<List<Test>>(JsonConvert.SerializeObject(itemSectionGroupNull));