我希望获得网络中所有不同朋友和朋友的列表。然后我想拿这个列表并从X日期开始为那些人提取所有新的注册。我在线阅读了一些关于如何使用linq for sql'其中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;
包含对我来说似乎并不合适,但我没有其他办法可以使用它远远接近我所寻找的东西:/
解决 现在删除了Id顶部已设置并且工作正常:)
答案 0 :(得分:1)
要解决您的第一个问题,您可以传递Distinct()
IEqualityComparer<T>
,告诉它如何比较对象。这样您就可以选择Friend
而不是匿名对象。
public class TestEquality : IEqualityComparer<Friend>
{
public bool Equals(Friend x, Friend y)
{
return x.Id == y.Id && x.Name == y.Name; // or however you determine equality
}
public int GetHashCode(Friend obj)
{
return obj.GetHashCode();
}
}
使用network.Contains(s.Membership.Id)
会生成一个sql,你在哪里查看生成的sql?