5

リストビューを埋めるためにLINQクエリを書いていますが、明らかに許可されていない.ToString()メソッドを使用しています。以下のコードを使用すると、エラー メッセージが表示されます。

エラー: LINQ to Entities はメソッド 'System.String ToString()' メソッドを認識せず、このメソッドはストア式に変換できません

LINQ で ToString() を使用する方法はありますか、それが不可能な場合、クエリで DateTime を String に変換する解決策は何ですか。ReleaseDateName が文字列であり、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();
}
4

2 に答える 2

9

クエリを具体化して一覧表示するため、次のように、RDBMS ではなく .NET 側で変換を行うことができます。

...
select new {
   rn.ReleaseTitle,
   plat.MediaPlatformName,
   pub.MediaPublisherName,
   c.CountryName,
   rd.ReleaseDateName,
   rd.ReleaseDate,
   a.AffiliateLinkAddress
}).AsEnumerable() // <<== This forces the following Select to operate in memory
.Select(t => new {
   t.ReleaseTitle,
   t.MediaPlatformName,
   t.MediaPublisherName,
   t.CountryName,
   ReleaseDate = t.ReleaseDateName ?? t.ReleaseDate.ToString()
   t.AffiliateLinkAddress        
}).ToList();

ToString()は から要素に対して呼び出されるため、IEnumerable<T>失敗しなくなりました。??また、null チェック? :条件の代わりに operator を使用していることにも注意してください。

于 2013-05-14T00:43:42.670 に答える
0

ToString()問題は、逆シリアル化されるまでフィールドを呼び出すことができないことです。したがって、クエリを呼び出そうとするのではなく、ToString()後で結果に対して呼び出すだけです。

データベースでは、操作している値にはToString()、エラーが発生する理由がわかりません。クエリは C# コードのように見えますが、内部では他のクエリと同様に SQL クエリに変換されていることに注意してください。リストを取得したら、非常に単純な LINQ クエリを記述して問題を解決できます。

于 2013-05-14T00:44:07.567 に答える