c# - Using ToString() in LINQ queries? -
i have writting linq query fill listview useses .tostring() method apparetly not allowed. when use below code error message:
error: linq entities not recognize method 'system.string tostring()' method, , method cannot translated store expression
is there way use tostring() in linq or if not possible solution converting datetime string in query. please knot releasedatename string , releasedate datetime
using (var db = new releaseinfo()) { lvreleaseinfo.datasource = (from r in db.mediareleases join rn in db.releasenames on new { mediareleaseid = r.mediareleaseid, culturecodeid } equals new { rn.mediareleaseid, rn.culturecodeid } join plat in db.mediaplatforms on new { mediaplatformid = r.mediaplatformid, culturecodeid } equals new { plat.mediaplatformid, plat.culturecodeid } join pub in db.mediapublishers on new { mediapublisherid = r.mediapublisherid, culturecodeid } equals new { pub.mediapublisherid, pub.culturecodeid } join c in db.countries on new { countryid = r.countryid, culturecodeid } equals new { c.countryid, c.culturecodeid } join rd in db.releasedates on new { mediareleaseid = r.mediareleaseid, culturecodeid } equals new { rd.mediareleaseid, rd.culturecodeid } join in db.affiliatelinks on new { mediareleaseid = r.mediareleaseid, culturecodeid } equals new { a.mediareleaseid, a.culturecodeid } r.sectionid == sectionid select new { rn.releasetitle, plat.mediaplatformname, pub.mediapublishername, c.countryname, releasedate = (rd.releasedate == null ? rd.releasedatename : rd.releasedate.tostring()), a.affiliatelinkaddress }).tolist(); lvreleaseinfo.databind(); }
since materializing query list anyway, conversion on .net side, rather in rdbms, this:
... select new { rn.releasetitle, plat.mediaplatformname, pub.mediapublishername, c.countryname, rd.releasedatename, rd.releasedate, a.affiliatelinkaddress }).asenumerable() // <<== forces following select operate in memory .select(t => new { t.releasetitle, t.mediaplatformname, t.mediapublishername, t.countryname, releasedate = t.releasedatename ?? t.releasedate.tostring() t.affiliatelinkaddress }).tolist();
since tostring()
called on element ienumerable<t>
, no longer fail. note use of ??
operator in place of null-checking ? :
conditional.
Comments
Post a Comment