如何在linq语句中填充集合属性

时间:2012-11-20 16:38:02

标签: linq entity-framework

我有一个地方,我有一个班级

[Table("SomeTable")]
public Class Thing
{
[Key]
public int Id { get; set; }
public string Description { get; set; }
public int ImAForeignKey { get; set; }
public bool HasStuff { get; set; }
}
...
...
public class ugly
{
public Thing Thing { get; set; }
public List<Thing> LotsOfThings { get; set; }
}

其中Thing是表示数据库中表的某个EF类... 然后我想创建一个丑陋的集合:

List<ugly> gruesome;
using (var db = new ThingyDatabase())
{
gruesome = db.Thing
          .Where(r => r.HasStuff && r.ImAForeignKey == passedin.someFKvaluePassedIn )
          .Select(r => new ugly {
                     Thing = passedin,
                     LotsOfThings = ??
           })
    .ToList();
}

...

我不确定我是如何填充ListOfTHings属性的....或者我是否可以这样做...我有一个我正在搜索的id和这个id(外键)可以在Thing中有多个记录但其中一条记录将成为父记录,其余记录将成为子记录。所以我最终会得到的是与孩子们的一系列事物......希望这会有所帮助。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

由于您提供的唯一信息是丑陋的类和linq语句,我认为这样可行:

List<ugly> gruesome;
using (var db = new ThingyDatabase())
{
gruesome = db.Thing
          .Where(r => r.HasStuff )
          .Select(r => new ugly {
                     Thing = r,
                     LotsOfThings = db.Think.Where(rr => rr.ImAForeignKey == r.Id).ToList()
           })
    .ToList();
}

这假设在Thing中有一个名为LotsOfThings的属性。

如果这不起作用,请提供其作用的结构。

答案 1 :(得分:0)

我最终做了以下事情:

List<ugly> gruesome;
using (var db = new ThingyDatabase())
{
  gruesome = db.Thing
      .Where(r => r.HasStuff && r.ImAForeignKey == passedin.someFKvaluePassedIn )
      .ToList();
}

var ughObj = new Ugly {
    Thing = passedin,
    LotsOfThings = gruesome
}

它给了我我需要的父母(传递)和孩子(可怕的)

感谢所有

答案 2 :(得分:0)

在阅读了你的问题和评论之后,我明白你只需要一个导航属性:

public Class Thing
{
    public int Id { get; set; }
    public string Description { get; set; }
    public bool HasStuff { get; set; }

    [ForeignKey("ChildThings")]
    public int ImAForeignKey { get; set; }
    public ICollection<Thing> ChildThings { get; set; }
}

现在你可以做到:

db.Thing
      .Where(r => r.HasStuff && r.ImAForeignKey == passedin.ImAForeignKey)
      .Select(r => new ugly {
                 Thing = r,
                 LotsOfThings = r.ChildThings
       })

但也许您不再需要ugly类,因为Thing实例包含您需要的所有内容。更好的是:这就足够了:

db.Thing.Include("ChildThings")
      .Where(r => r.HasStuff && r.ImAForeignKey == passedin.ImAForeignKey)