1

NotMappedとマークされているプロパティにアクセスする方法がわからないため、印刷できます。アクセスしようとすると、

指定されたタイプメンバー'LinkAddress'は、LINQtoEntitiesではサポートされていません。初期化子、エンティティメンバー、およびエンティティナビゲーションプロパティのみがサポートされます。

私のLINQクエリは次のとおりです。

(from n in db.Navigation
                                  join s in db.Sections on n.SectionID equals s.SectionID
                                  join sl in db.Locale_Sections on s.SectionID equals sl.SectionID
                                  where n.Category == "Books" && sl.CultureID == 1
                                  select new
                                  {
                                      s.LinkAddress,
                                      sl.Title,
                                  }).ToList();

セクションの私のコンテキストは次のとおりです。

    [Table("Section")]
public class Section
{
    [Key, Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Int16 SectionID { get; set; }

    public Int64 LogoFileID { get; set; }

    [ForeignKey("LogoFileID")]
    public virtual File File { get; set; }

    [Required, MaxLength(15), Column(TypeName = "varchar")]
    public string RouteName { get; set; }

    [Required, MaxLength(15), Column(TypeName = "varchar")]
    public string Type { get; set; }

    public virtual ICollection<Locale_Section> Translations { get; set; }

    [NotMapped]
    public string LinkAddress
    {
        get
        {
            return Type + "/" + RouteName;
        }
    }
}
4

1 に答える 1

5

マップされていないため、クエリで使用できません...プロパティにアクセスする前にオブジェクトをマテリアライズする必要があります...

var materialised = (from n in db.Navigation
     join s in db.Sections on n.SectionID equals s.SectionID
     join sl in db.Locale_Sections on s.SectionID equals sl.SectionID
     where n.Category == "Books" && sl.CultureID == 1
     select new
     {
          s,
          sl.Title,
     }).ToList()

// This bit is done in CLR
return materialised.Select(m => new 
{
    m.s.LinkAddress,
    m.Title
});

または、有効なクエリにロジックを組み込むこともできます...

(from n in db.Navigation
 join s in db.Sections on n.SectionID equals s.SectionID
 join sl in db.Locale_Sections on s.SectionID equals sl.SectionID
 where n.Category == "Books" && sl.CultureID == 1
 select new
 {
     LinkAddress = s.Type + "/" + s.RouteName,
     sl.Title,
 }).ToList()
于 2013-03-03T01:25:47.090 に答える