Entity SQL 说说IN关键字
Entity SQL(ESQL) 是专门为ADO.NET Entity Framework(EF)提供查询更新数据而产生的,也就是ESQL是EF的附属部件。ESQL大大提高了EF的使用性,我们就可以像使用SQL查询Table一样很方便地对EF生成的实体集合,尽管它还是加载配置文件,把ESQL转化成SQL来对Table进行查询,但这可以算是一个非常具有革命性的东东。
ESQL乍一眼看上去,跟SQL没有太大区别,但事实上却不尽其然,这不,就遇到了ESQL中的IN关键字,它跟SQL的IN关键字不尽相同,不能在IN后面跟一个查询,而只能跟一个集合类型。不知道是因为在EF设计时就不想再让我们用IN后面跟查询的方式了呢,还是算是ESQL的一个缺陷,我不得面知,暂时就算是缺陷吧!那么在SQL中In后面跟一个查询的这种方式,如:SELECT * FROM A WHERE A.ID IN(SELECT ID FROM B),在ESQL里面怎么来完成类似上面的查询呢?暂时我没有找到微软官方的相关解决方案,我就不得不自己想办法解决这个问题啊,不让我们使用带查询的IN,那我就用别的来代替嘛。经过研究,我发现了另一个可以代替In的写法,就是使用ESQL里面的Exists来弥补ESQL中IN的缺陷。如上面的查询,我们完全可以写成SELECT A FROM A WHERE EXISTES(SELECT B.ID FROM B WHERE B.ID=A.ID)。
唉,问题算解决了吧!不过EXISTS的运行效率,不敢让人恭维,只能在小数据量时使用,如果数据过多,那就死翘翘了。好在我现在的数据量不是很大,也算是勉强完成了任务,可是认真想下,它毕竟是个隐患!