我有一个地方,我有一个班级
[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中有多个记录但其中一条记录将成为父记录,其余记录将成为子记录。所以我最终会得到的是与孩子们的一系列事物......希望这会有所帮助。
有什么想法吗?
答案 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)