【发布时间】:2013-11-15 17:35:52
【问题描述】:
我希望获得网络中所有不同朋友和朋友的朋友的列表。然后,我想获取该列表并提取自 X 日期以来这些人的所有新注册。我在网上阅读了一堆关于如何将 linq 用于 sql 'where in' 子句的信息,但我无法按照我发现的方式应用它。当前代码也没有返回完整的代理,只是我选择的。我只选择特定数据,因为如果它返回完整的代理记录,我似乎无法获取一个不同的列表。为了增加这个问题,现在我已经将它设为了一个匿名类型,我的注册查询无法针对它运行。我实现这一目标的最佳方式是什么?
关键问题:
- 我需要返回代理的完整模型但不同
- 我需要为上面收集的代理提取最新注册,最好使用“where in”子句,这样我就不必执行一个循环访问数据库一百万次。
获取网络中不同的人员列表
var network = agent.Friends.Where(f => f.FriendAgent != null)
.SelectMany(f => f.FriendAgent.Friends
.Select(c => c.FriendAgent)
.Where(x => x != null))
.Distinct<NPlay.Common.Models.Agent>(new TestEquality())
.Take(100).ToList();
^---使用Jared在答案中描述的方法解决---^
选择自 X 日期以来的最新注册
var query =
from s in _signupRepository.List.OrderByDescending(s=>s.Created).Where(s => s.Created >= startDate && s.Created <= endDate && !s.Canceled.HasValue)
where network.Contains(s.Membership)
select s;
Contains 对我来说似乎不合适,但我没有其他方法可以使用它与我正在寻找的东西很接近:/
已解决 移除了 Id,因为顶部已经设置并且可以正常工作了 :)
【问题讨论】:
-
为什么你有
dynamic而不是var? -
小细节,我打算为其添加动态属性,但这可以改变我对类型并不难。我已经制作了一个电子邮件模板处理器系统,它使用动态,整个方法的最终模型将是动态的,但这个特定的调用不一定是。因为我“修复”了项目无法编译的第一个查询,因为它是匿名类型,而不是它之前工作过:/
标签: c# linq ef-code-first