1
I have this foreach
:
foreach (var row in responseObject)
{
if (row.CDOrigem == request.CentroDeDistribuicaoId)
{
if (row.FaixasPreco == null || row.FaixasPreco.Count() == 0)
{
var uniqueItem = new ConsultarPrecoFaixaResponse();
uniqueItem.PrecoBRL = row.ValorProduto;
uniqueItem.PrecoUSD = row.ValorDolar;
uniqueItem.CodigoMoeda = row.CodigoMoeda;
faixaPrecoResponse.Add(uniqueItem);
}
else
{
foreach (var faixaPreco in row.FaixasPreco)
{
decimal cotacaoCalculada = 1;
if (row.CodigoMoeda != CODIGO_MOEDA_REAL)
cotacaoCalculada = row.ValorProduto / row.ValorDolar;
var faixaPrecoItem = new ConsultarPrecoFaixaResponse();
if (row.CodigoMoeda != CODIGO_MOEDA_REAL)
{
faixaPrecoItem.PrecoBRL = faixaPreco.Preco * cotacaoCalculada;
faixaPrecoItem.PrecoUSD = faixaPreco.Preco;
}
else
{
faixaPrecoItem.PrecoBRL = faixaPreco.Preco;
faixaPrecoItem.PrecoUSD = 0;
}
faixaPrecoItem.CodigoMoeda = row.CodigoMoeda;
faixaPrecoItem.QtdeMinimo = faixaPreco.Minimo;
faixaPrecoItem.QtdeMaximo = faixaPreco.Maximo;
faixaPrecoResponse.Add(faixaPrecoItem);
}
}
break;
}
}
From that, I started writing this lambda
var qry = responseObject.Where(obj => obj.CDOrigem == request.CentroDeDistribuicaoId)
Note that this Where has to do with the first if inside the foreach, but from there I started to get doubtful to follow. Don’t need code, just guidance on how to move forward, in relation to other if’s and etc..
EDIT1
That way is the right way?
var qry = responseObject
.Where(obj => obj.CDOrigem == request.CentroDeDistribuicaoId)
.Where(row => row.FaixasPreco == null || row.FaixasPreco.Count() == 0)
.Select(sel => new ConsultarPrecoFaixaResponse
{
PrecoBRL = sel.ValorProduto,
PrecoUSD = sel.ValorDolar,
CodigoMoeda = sel.CodigoMoeda,
})
EDIT2
Based on the answer of João Martins, I did so and now comes the values of the products, but remains slow
var qry1 = from ro in responseObject
.SelectMany(r => r.FaixasPreco, (ro, fp) => new { ro, fp })
select new ConsultarPrecoFaixaResponse()
{
PrecoBRL = (ro.ro.FaixasPreco == null || ro.ro.FaixasPreco.Count() == 0 ? ro.ro.ValorProduto : (ro.ro.CodigoMoeda == CODIGO_MOEDA_REAL ? ro.fp.Preco : (ro.fp.Preco * (ro.ro.ValorProduto / ro.ro.ValorDolar)))),
PrecoUSD = (ro.ro.FaixasPreco == null || ro.ro.FaixasPreco.Count() == 0 ? ro.ro.ValorDolar : (ro.ro.CodigoMoeda == CODIGO_MOEDA_REAL ? 0 : ro.fp.Preco)),
CodigoMoeda = ro.ro.CodigoMoeda,
QtdeMinimo = ro.fp.Minimo,
QtdeMaximo = ro.fp.Maximo
};
faixaPrecoResponse.AddRange(qry1);
I made an issue, but that way it’s wrong. I need Join or things like that?
– pnet
I took the Consult and made an anonymous select new and added another property like Faixaspreco, so I can follow with Where other than null and Count() higher than 0
– pnet
This can depend a lot on the amount of information you have to return!
– João Martins