2

我在这里关注这个帖子

他的代码看起来像这样

from p in ctx.Persons
where p.ID == personId
select new PersonInfo
{
    Name = p.FirstName + " " + p.LastName,
    BornIn = p.BornInCity.Name,
    LivesIn = p.LivesInCity.Name,
    Gender = p.Sex.Name,
    CarsOwnedCount = p.Cars.Count(),
}
  • 现在,当他使用 p.LivesInCity.Name 时(我的假设是他有 2 个不同的 ViewModels 类,其中 1 个有 IEnumerable 或某种城市名称的集合?)

问题

  • 他如何访问p.LivesInCity.Name,但当我尝试时,p.Countys.[CountyColectionForSections].[SectionProperty]我会看到下面的图片

在此处输入图像描述

这是我设置 ViewModel 的方式

  • 表格1

    public string Client { get; set; }
    public virtual ICollection<dbProspect> Prospects { get; set; }
    
  • 表 2

    public int Prospect { get; set; }
    public virtual ICollection<dbCounty> Countys { get; set; }
    public virtual ICollection<UserProfiles> UserProfiles { get; set; }
    
  • 表3...

表 3 将有另一个表的集合,表 4 将有另一个集合,依此类推,基本上是一个大约 15 深的表层次结构。

这是我尝试访问它们的方法

var x = from c in db.Client
        select new ViewModelExcelReport 
        {
             client = c.ClientName,
             cntyCounty = p.Countys. //Here is where i would like to say p.Countys.[CountyProperty]
             sctSection = p.Countys.[CountyColectionForSections].[SectionProperty]
        }
4

2 回答 2

2

如果您希望每个县只有一个,Client并且我猜测实体之间的关系,您可以执行以下操作:

var x = from c in db.Client
        from p in c.Prospects
        from ct in p.Countys
        select new ViewModelExcelReport 
        {
             client = c.ClientName,
             cntyCounty = ct.County,
             sctSection = ct.Section
        };
于 2013-10-03T15:55:14.747 回答
0

第一个示例有效,因为他仅引用实体的单个实例(城市类型的 LivesIn),然后引用其中的单个原始值(名称属性只是一个字符串)。

我看到您正在尝试通过引用 IEnumerable (Countys) 来投射新类型,但您从未真正枚举/迭代/实现实例。

p.Countys.[CountyProperty] 永远不会存在,因为您有一个对集合的引用,并且您必须首先获得对单个对象的引用。您可以使用 Countys.Single() 或 SingleOrDefault() 来做到这一点,但我怀疑这就是您想要的。我认为您想要的是以相反的方向遍历模型。从“多”端到“一”端。像这样的东西:

var x = from c in db.County
    select new ViewModelExcelReport 
    {
         County = c.Name,
         CountyProperty = c.AnyProperty,
         Section = c.Section.Name,
         Prospect = c.Prospect.Name,
         Client = c.Prospect.Client.Name
    }
于 2013-10-03T16:37:59.617 回答