26. 11. 2017, Vladimír Klaus, navštíveno 1378x
A je to tu zase. Několik let funguje nějaký kód bez nejmenších problémů a když ho je trochu upravíte, tak začne vykazovat zcela nesmyslnou chybu. Měl jsem jednoduchou proměnnou, kterou jsem pak připojil k hlavnímu dotazu.
var HledaciPodminka = " WHERE NeniAktualni='False'";
Po čase jsem potřeboval přidat další podmínku:
var HledaciPodminka = " WHERE NeniAktualni='False' AND BU='" + App.BU + "' ";
Co je App.BU? To je docela jedno, ale typ je to "dynamic". Díky tomu se i HledaciPodminka stala "dynamic". Na tom asi není, resp. nemělo by být nic fatálního. Ovšem, když pak toto zavoláte, tak to není dobré...
var selectQueryString = "SELECT TOP 300 * FROM SHIPMENTShipments "
+ HledaciPodminka;
var data = db.Query(selectQueryString);
var PocetPolozek = data.Count();
Prostě to skončí chybou:
Je to docela šílené, protože co jiného, než string byste měli předávat jako parametr Query. Bohužel díky "dynamic" na začátku je vše následující také "dynamic" a tak i data jsou "dynamic" a u nich nelze volat metodu Count(), ale jen se ptát na vlastnost Count.
Řešení je naštěstí zcela jednouché - všude, kde máte var a dává to smysl, nahraďte za string. V tu chvíli se i proměnná data změní z dynamic na IEnumerable<dynamic> a vše bude fungovat tak jako dřív.
Viz též: