急!求教EF GroupJoin 修改默认的比较器出错
问题描述:想要个左外查询的linq语句,使用groupjoin并提供自定义比较器。错误描述:LINQ to Entities 不识别方法“System.Linq.IQueryable`1[HuaDan.Models.CallAndPersons] GroupJoin[Call,Person,CallAndPerson,CallAndPersons](System.Linq.IQueryable`1[HuaDan.Entity.Call], System.Collections.Generic.IEnumerable`1[HuaDan.Entity.Person], System.Linq.Expressions.Expression`1[System.Func`2[HuaDan.Entity.Call,HuaDan.Entity.Comparer.CallAndPerson]], System.Linq.Expressions.Expression`1[System.Func`2[HuaDan.Entity.Person,HuaDan.Entity.Comparer.CallAndPerson]], System.Linq.Expressions.Expression`1[System.Func`3[HuaDan.Entity.Call,System.Collections.Generic.IEnumerable`1[HuaDan.Entity.Person],HuaDan.Models.CallAndPersons]], System.Collections.Generic.IEqualityComparer`1[HuaDan.Entity.Comparer.CallAndPerson])”,因此该方法无法转换为存储表达式。
相关代码:var callAndPersons = db.Calls.Where(c => c.DataFile.Id == dataFileId && c.HaoMa != null)
.GroupJoin(db.Persons,
c => new CallAndPerson { K1 = c.HaoMa, K2 = c.HaoMa, K3 = c.HaoMa },
p => new CallAndPerson { K1 = p.HaoMa, K2 = p.XuNiHao, K3 = p.GuHua },
(c, p) => new CallAndPersons { Call = c, Persons = p },
new CallAndPersonComparer())
.GroupBy(e => e.Call.HaoMa)
.OrderByDescending(c => c.Count())
.ToPagedList(pageIndex, pageSize);
比较器代码
public class CallAndPersonComparer : IEqualityComparer<CallAndPerson>
{
//public string K1 { get; set; }
//public string K2 { get; set; }
//public string K3 { get; set; }
public bool Equals(CallAndPerson x, CallAndPerson y) //比较x和y对象是否相同S
{
return (x.K1 == y.K1 || x.K2 == y.K2 || x.K3 == y.K3);
}
public int GetHashCode(CallAndPerson obj)
{
return obj.ToString().GetHashCode();
}
}
CallAndPerson类只用CallAndPersonComparer注释掉的K1-K3属性。
请高手解决下。 ef linq c# --------------------编程问答-------------------- var callAndPersons = db.Calls.Where(c => c.DataFile.Id == dataFileId && c.HaoMa != null).ToList() .GroupJoin(db.Persons,
c => new CallAndPerson { K1 = c.HaoMa, K2 = c.HaoMa, K3 = c.HaoMa },
p => new CallAndPerson { K1 = p.HaoMa, K2 = p.XuNiHao, K3 = p.GuHua },
(c, p) => new CallAndPersons { Call = c, Persons = p },
new CallAndPersonComparer())
.GroupBy(e => e.Call.HaoMa)
.OrderByDescending(c => c.Count())
.ToPagedList(pageIndex, pageSize);
--------------------编程问答-------------------- 谢谢,.ToPagedList(pageIndex, pageSize);
提示错误 2 “System.Linq.IOrderedEnumerable<System.Linq.IGrouping<string,HuaDan.Models.CallAndPersons>>”不包含“ToPagedList”的定义,并且找不到可接受类型为“System.Linq.IOrderedEnumerable<System.Linq.IGrouping<string,HuaDan.Models.CallAndPersons>>”的第一个参数的扩展方法“ToPagedList”(是否缺少 using 指令或程序集引用?)
ToPagedList需要一个IOrderedQueryable吧?这个怎么解决 --------------------编程问答--------------------
.AsQueryable()
.ToPagedList(pageIndex, pageSize); --------------------编程问答-------------------- 为什么重复匹配,p => new CallAndPerson { K1 = p.HaoMa, K2 = p.XuNiHao, K3 = p.GuHua },
而不是和c => new CallAndPerson { K1 = c.HaoMa, K2 = c.HaoMa, K3 = c.HaoMa },匹配呢
补充:.NET技术 , LINQ