Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果每个人都存在关联(相关)记录,LINQ查询将返回true_Linq_Entity Framework_Ef Code First - Fatal编程技术网

如果每个人都存在关联(相关)记录,LINQ查询将返回true

如果每个人都存在关联(相关)记录,LINQ查询将返回true,linq,entity-framework,ef-code-first,Linq,Entity Framework,Ef Code First,我有一个具有相关(关联)FavoritePeople表的People对象。FavoritePeople对象只存储UserId和PersonId,这样我们就知道哪些人是用户的最爱 我使用EntityFramework4.2和Code First,我映射了People中的所有字段,除了IsFavorite,它是一个布尔值,我的想法是如果FavoritePeople中存在相关记录,则将其设置为true 我想在IsFavorite列中返回所有具有正确值的人员记录 虽然我可以在SQL中解决这个问题,但我仍

我有一个具有相关(关联)FavoritePeople表的People对象。FavoritePeople对象只存储UserId和PersonId,这样我们就知道哪些人是用户的最爱

我使用EntityFramework4.2和Code First,我映射了People中的所有字段,除了IsFavorite,它是一个布尔值,我的想法是如果FavoritePeople中存在相关记录,则将其设置为true

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

虽然我可以在SQL中解决这个问题,但我仍然坚持在LINQ中解决这个问题


有什么建议吗?

如果你有一处属于FavoritePeople的房产,你可以

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

如果你有一处属于最喜欢的人的房产,你也许可以

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

我没有足够的代表发表评论,所以我会回答

如果您选择多人,使用Tyron的解决方案会给您带来糟糕的性能。

在查询人员时,您应该使用
急切地加载FavoritePeople引用。包括(x=>x.FavoritePeople)
(警告:数据库中可能有大量数据集)
,或者(最好)重写查询以包括iFavorite:

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

我没有足够的代表发表评论,所以我会回答

如果您选择多人,使用Tyron的解决方案会给您带来糟糕的性能。

在查询人员时,您应该使用
急切地加载FavoritePeople引用。包括(x=>x.FavoritePeople)
(警告:数据库中可能有大量数据集)
,或者(最好)重写查询以包括iFavorite:

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

问题不太清楚-什么是“关联记录”?基本上,所谓关联,我的意思是,如果FavoritePeople表中存在某个人的记录,则在该个人的People表中将IsFavorite字段设置为true。问题不太清楚-什么是“关联记录”?基本上,所谓关联,我的意思是,如果FavoritePeople表中存在某个人的记录,则在该人的People表中将IsFavorite字段设置为true。谢谢Tyron,这是一个很好的答案,可以在单个记录的基础上处理它,但我需要对整个集合执行此操作。@Mitch-如果您有一组人,然后,我只需迭代集合,并为每个集合获取“IsFavorite”值。然后你就可以随心所欲了。您将无法使用单个属性来处理整个集合。@JasCav-谢谢您的评论。也许我的整个方法都错了。我只是想在人员列表中显示一个复选框,以显示每个人是否在当前用户收藏夹列表中。我本以为这是一种相当普遍的情况,有一些行之有效的方法(使用LINQ)。感谢tyrongower和JasCav的评论。我决定接受他们的建议,在foreach循环中使用FavoritePeople.Any()。不确定这是否是最有效的方法,但它确实有效!这是数据库中x的codevar people=from;foreach(Person-Person-in-people){if(Person.FavoritePeople.Any())Person.ispined=true;}返回people;谢谢Tyron,这是一个很好的答案,可以在单个记录的基础上处理它,但我需要对整个集合执行此操作。@Mitch-如果您有一个人员集合,我只需迭代该集合,并为每个人获取“IsFavorite”值。然后你就可以随心所欲了。您将无法使用单个属性来处理整个集合。@JasCav-谢谢您的评论。也许我的整个方法都错了。我只是想在人员列表中显示一个复选框,以显示每个人是否在当前用户收藏夹列表中。我本以为这是一种相当普遍的情况,有一些行之有效的方法(使用LINQ)。感谢tyrongower和JasCav的评论。我决定接受他们的建议,在foreach循环中使用FavoritePeople.Any()。不确定这是否是最有效的方法,但它确实有效!这是数据库中x的codevar people=from;foreach(Person-Person-in-people){if(Person.FavoritePeople.Any())Person.ispined=true;}返回people;