2017-07-05 4 views
0

Ich habe eine Preisspanne Abfrage Ich versuche, um zu bestimmen, für meinen C# -Code und in Abhängigkeit von dem Währungstyp des Produkts ich dem richtigen FeldKann die Serialisierungsinformationen IIF

var minPrice = builder.Gte(s => s.Price.CurrencyCode == "USD" ? s.Price.Usd : s.Price.Foreign, filter.MinPrice); 
var maxPrice = builder.Lte(s => s.Price.CurrencyCode == "USD" ? s.Price.Usd : s.Price.Foreign, filter.MaxPrice); 

abfragen müssen zu schreiben, aber wenn ich den Code ausführen dieses ich die folgende Fehlermeldung erhalten zu testen:

Unable to determine the serialization information for s => IIF((s.Price.CurrencyCode == ""USD""), s.Price.Usd, s.Price.Foreign).

wenn ich die ternären herausnehmen und schauen nur für den US-Preis ist es perfekt funktioniert, aber ich muss in der Lage sein, es für nicht aussehen zu lassen US-Preise auch, mache ich etwas falsch?

Antwort

1

nicht sicher, was hier vor sich geht (ich glaube, diese Art der Abfrage ist nur noch nicht unterstützt), aber wie über Sie die Abfrage wie so umschreiben:

var minPrice = (builder.Where(s => s.Price.CurrencyCode == "USD") & builder.Gte(s => s.Price.Usd, filter.MinPrice)) 
       | (builder.Where(s => s.Price.CurrencyCode != "USD") & builder.Gte(s => s.Price.Foreign, filter.MinPrice)); 
    var maxPrice = (builder.Where(s => s.Price.CurrencyCode == "USD") & builder.Lte(s => s.Price.Usd, filter.MaxPrice)) 
       | (builder.Where(s => s.Price.CurrencyCode != "USD") & builder.Lte(s => s.Price.Foreign, filter.MaxPrice)); 
+0

, die es taten, dank – Eman