当前位置:编程学习 > C#/ASP.NET >>

急!求教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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,