如何在实体到Linq查询中获得二进制字符串交集的正确结果

时间:2015-08-14 06:30:59

标签: c# linq entity-framework

我将数据保存在二进制外观字符串中,例如“100010”。我想检查它是否与其他字符串“100000”在相应位置具有相同的值。 所以我尝试使用“交叉点”。在这种情况下,交叉的结果将是“100000”,它可以被视为我需要的项目。但是当我查询实体到Linq语句时,我该如何使用这个概念?

以下是我的想法:

var chemicals = db.ChemicalItem.Where(c => c.CategoryNumber.ToCharArray().Intersect(catekey.ToCharArray()).Count()>0);

“CategoryNumber”是我的数据,“catekey”是用于比较的字符串。它们都是二进制外观字符串(cantain 6 chars)。如果计数不为0,则它​​们在同一索引中具有'1'。我可以得到正确的查询。

可悲的是,它没有用。我总是得到DbExpressionBinding错误。可以告诉我什么是错的?感谢。

PS:我不擅长英语并且第一次在这里发布这个问题,对不起我的不好表达并感谢你的阅读。

1 个答案:

答案 0 :(得分:1)

LINQ to Entities正在尝试根据您的条件创建SQL查询,但无法为您指定的表达式执行此操作。

解决问题的一种方法"问题是在代码中而不是在SQL中进行过滤,但这会影响性能,因为所有记录都将被检索到客户端并在那里进行过滤。这是你如何做到的(注意添加的ToList()):

var chemicals = db.ChemicalItem.ToList().Where(c => c.CategoryNumber.ToCharArray().Intersect(catekey.ToCharArray()).Count()>0);

建议的方法是在SQL中进行过滤,但在这种情况下,您需要在SQL中编写一个等效的存储过程,它将进行过滤并从您的EF代码中调用它。仍然这样的过滤不会非常有效,因为SQL将无法使用任何索引,并且总是需要进行表扫描。