首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IEqualityComparer异常

IEqualityComparer异常
EN

Stack Overflow用户
提问于 2010-06-22 18:55:52
回答 1查看 743关注 0票数 1

我正在使用Entity Framework4.0,并试图在我的上下文对象中使用其中一个对象集的“包含”函数。为此,我编写了一个比较器类:

代码语言:javascript
运行
复制
    public class RatingInfoComparer : IEqualityComparer<RatingInfo>
    {           
        public bool Equals(RatingInfo x, RatingInfo y)
        {
            var a = new {x.PlugInID,x.RatingInfoUserIP};
            var b = new {y.PlugInID,y.RatingInfoUserIP};

            if(a.PlugInID == b.PlugInID && a.RatingInfoUserIP.Equals(b.RatingInfoUserIP))
                return true;
            else
                return false;
        }

        public int GetHashCode(RatingInfo obj)
        {
            var a = new { obj.PlugInID, obj.RatingInfoUserIP };

            if (Object.ReferenceEquals(obj, null))
                return 0;
            return a.GetHashCode(); 
        }


    }

当我尝试使用这个代码的比较器时:

代码语言:javascript
运行
复制
    public void SaveRatingInfo2(int plugInId, string userInfo)
    {

        RatingInfo ri = new RatingInfo()
        {
            PlugInID = plugInId,
            RatingInfoUser = userInfo,
            RatingInfoUserIP = "192.168.1.100"
        };

        //This is where i get the execption
        if (!context.RatingInfoes.Contains<RatingInfo>(ri, new RatingInfoComparer()))
        {
            //my Entity Framework context object
            context.RatingInfoes.AddObject(ri);
            context.SaveChanges();
        }
    }

我得到了一个感叹:

"LINQ to Entities无法识别方法'Boolean ContainsRatingInfo‘方法,并且他的方法无法转换为存储表达式。“

因为我不精通linQ和实体框架,所以我在"GetHashCode“函数或一般情况下使用"var”时可能会犯错误。

如果我的错误很明显,你一定要告诉我:)它不会停止我的项目!但是对我来说理解为什么一个简单的比较器不能工作对我来说是很重要的。

谢谢Aaron

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-22 19:08:28

LINQ to Entities的工作原理是通过IQueryable接口将表达式树转换为queries against an object model。这意味着你只能把东西放入LINQ to Entities能理解的表达式树中。

它不理解您正在使用的Contains方法,所以抛出了您所看到的异常。这是一个list of methods which it understands

Set Methods部分标题下,它将使用项的包含列为支持,但将带有IEqualityComparer的包含列为不支持。这大概是因为它必须能够解决如何将IEqualityComparer转换为对对象模型的查询,这将是困难的。你也许可以使用多个Where子句来做你想做的事情,看看文档后面支持哪些子句。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3092390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档