2012-02-26 32 views
1

我有一个People对象,其中包含FavoritePeople的相关(关联)表。 FavoritePeople对象只存储UserId和PersonId,因此我们知道哪些人是用户最爱。LINQ查询返回true,如果每个人存在关联(相关)记录

我在Code First中使用Entity Framework 4.2,并且映射了除了IsFavorite之外的所有字段,布尔值和我的想法是在FavoritePeople中存在相关记录时将其设置为true。

我想在IsFavorite列中返回所有具有正确值的人员记录。

虽然我可以研究如何在SQL中做到这一点,但我一直坚持如何在LINQ中做到这一点!

有什么建议吗?

+0

问题不很清楚 - 什么是“相关记录”? – BrokenGlass 2012-02-26 22:06:40

+0

基本上,通过关联我的意思是如果一个记录存在于FavoritePeople表中的Person,那么在该人的People表中将IsFavorite字段设置为true。 – Mitch 2012-02-26 22:29:29

回答

1

,如果你有一个FavoritePeople财产,你可能能够..

public bool IsFavorite {get{return FavoritePeople.Any();}} 
+0

谢谢Tyron,这是在单个记录的基础上处理它的一个很好的答案,但我需要为整个集合执行此操作。 – Mitch 2012-02-26 22:25:48

+0

@Mitch - 如果您有人员集合,那么我只需遍历集合并获取每个集合的“IsFavorite”值。然后你可以随心所欲地做。您将无法使用单个属性来处理整个集合。 – JasCav 2012-02-26 22:29:40

+0

@JasCav - 感谢您的评论。也许我对此的整个方法是错误的。我只想在人员列表中显示一个复选框,以显示每个人是否在当前用户收藏夹列表中。我会认为这是一个相当普遍的情况,有一些很好的做法(使用LINQ)。 – Mitch 2012-02-26 22:38:42

0

我没有足够的代表处发表评论,所以我会用一个答案回答;

如果您选择多个人,使用泰龙的解决方案将带给您可怕的表现。

为人们查询时,您应该要么热切地加载与.Include(x => x.FavoritePeople)的FavoritePeople参考(警告:从数据库中庞大数据集的机会)
OR(最好)重写查询到包括IsFavorite:

ctx.Peoples.Select(x => new 
{ 
    x.Name, 
    IsFavorite = x.FavoritePeople.Any() 
}); 
相关问题