我正在爲客戶提供第三方服務,該服務向我提供產品和服務的清單,這些清單有點亂。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