我正在为客户提供第三方服务,该服务向我提供产品和服务的清单,这些清单有点乱。C#Linq GroupBy和Select性能
名单将返回所有services
为product
但product
repeats itself
,例如:
的产品A有服务A和产品A也有服务B所以,当我收到名单我会得到两个产品A与服务A和B
我需要做的是将所有产品进行分组,以获得所有产品的服务,并且我已经这样做了,但是我担心性能,因为我认为我的解决方案不是'最好的':
var productsNormalized = products.Data.AsEnumerable().Select(x => new ProdutoSSO
{
CodigoServico = int.Parse(string.IsNullOrEmpty(x["CodigoServico"].ToString()) ? "0" : x["CodigoServico"].ToString()),
CodigoPeca = int.Parse(string.IsNullOrEmpty(x["CodigoPeca"].ToString()) ? "0" : x["CodigoPeca"].ToString()),
CodigoFamilia = int.Parse(string.IsNullOrEmpty(x["CodigoFamilia"].ToString()) ? "0" : x["CodigoFamilia"].ToString()),
Familia = x["Familia"].ToString(),
Servico = x["Servico"].ToString(),
Peca = x["Peca"].ToString(),
Hash = x["Hash"].ToString(),
Valor = decimal.Parse(string.IsNullOrEmpty(x["Valor"].ToString()) ? "0" : x["Valor"].ToString())
})
.GroupBy(x => new { x.CodigoPeca, x.CodigoFamilia, x.Familia, x.Peca })
.Select(x => new ProdutoGroup
{
Produto = new Produto
{
CodigoPeca = x.Key.CodigoPeca,
CodigoFamilia = x.Key.CodigoFamilia,
Familia = x.Key.Familia,
Peca = x.Key.Peca
},
Servicos = x.Select(y => new ProdutoServico
{
CodigoServico = y.CodigoServico,
Hash = y.Hash,
Servico = y.Servico,
Valor = y.Valor
}).ToList()
});
有没有更好的方法来实现这一目标,或者这样做还不错?
代码需要多长时间?你想要多久? – mjwills
*'只能得到一个所有的服务'* - 看起来好像你在查询所有组和所有服务。没有过滤,也没有像'Take(1)'或'First()'# –
@SergeyBerezovskiy问题是服务,它将返回一个所有产品的列表,没有过滤器,没有任何东西。我必须在我身边这样做 – Terkhos