C# EF Core 通过条件选择特定列

问题描述 投票:0回答:1

我的数据库中有一个表,其中包含大约 100 多列。

我有一个查询将从数据库中选择特定列。但我想以一种动态的方式来做。在 100 多列中,总会有 2 列存在,并且在 100 多列中还会多出一列。

目前我正在使用选择表达式

Expression<Fun<MyTable,MyDto>> Select = p => new MyDto() {
 Column1 = p.Column1,
 Column2 = p.Column2,
 Extra = p.(on of the 100 Column)
}

但我想动态地将这个额外属性设置为其中一列。

类似的东西

if (SomeCondition) // This  can an Enum or a String which will determine which column to chose
{

 Select.Extra = (one of the 100 Column)
}
else {
 Select.Extra = (one of the 100 Column)

}

有没有办法在运行时更新所选列?

c# entity-framework linq
1个回答
0
投票

所以我能够根据smoksnes的评论弄清楚事情。

但是我想分享我提出的解决方案以及我选择的解决方案

我的解决方案:

Expression<Fun<MyTable,MyDto> Select = p => new MyDto() {
   Column1 = p.Column1,
   Column2 = p.Column2,
  Extra = p.GetType().GetProperty("ColumnNameToSelect").GetValue(p).ToString()
}

现在上面的解决方案可以工作,但与下面的解决方案相比,在处理 10000+ 大量行时,性能会很糟糕。

我采用的解决方案

_context.MyTable.Where(p => p.IsDeleted == false)
.Select<MyDto>($"new (Column1 as Column1,Column2 as Column2, Extra as {"ColumnNameToSelect"})")
.ToList()

上述解决方案具有更好的性能,因此请使用该解决方案,并且仅在满足您的用例的情况下才使用第一个解决方案。

这两个解决方案都可与 EF Core 配合使用,并且已在 NET 6 上进行了测试。 不知道其他版本。

© www.soinside.com 2019 - 2024. All rights reserved.