我正在编写一个LINQ查询来填充listview
,但它使用了.ToString()
方法,这显然是不允许的。当我使用下面的代码时,我得到了错误消息:
错误:LINQ to Entities无法识别方法“System.String ToString()”方法,并且此方法无法转换为存储表达式
有没有一种方法可以在LINQ中使用ToString()
,或者如果这是不可能的,那么在查询中将DateTime
转换为String
的解决方案是什么?请知道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 a in db.AffiliateLinks
on new { MediaReleaseID = r.MediaReleaseID, CultureCodeID } equals new { a.MediaReleaseID, a.CultureCodeID }
where 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();
}
字符串
2条答案
按热度按时间nfg76nw01#
由于无论如何都要将查询具体化为列表,因此可以在.NET端而不是在RDBMS中进行转换,如下所示:
字符串
由于
ToString()
是在IEnumerable<T>
中的元素上调用的,因此它将不再失败。还要注意使用??
操作符代替空检查? :
条件。8ftvxx2r2#
问题是,在字段被格式化之前,你不能在字段上调用
ToString()
。所以,与其在查询中调用ToString()
,不如在查询结果中调用。在数据库中,你操作的值没有
ToString()
的概念,这就是为什么你会得到错误。查询可能看起来和感觉像C#代码,但请记住,在封面下,它被转换为SQL查询像任何其他。在你得到列表后,你可以写一个非常简单的LINQ查询来解决这个问题。