Sql 实体框架-子句用法中的属性

Sql 实体框架-子句用法中的属性,sql,entity-framework,entity-framework-5,Sql,Entity Framework,Entity Framework 5,我需要在数据库的查询中使用“普通”WHERE和IN子句按不同字段过滤一些实体,但我不知道如何使用EF进行过滤 这是一种方法: 数据库表 EF中所需的SQL查询 EF代码 using (DatabaseEntities db = new DatabaseEntities ()) { return db.Licenses.Where( i => i.license == mylicense // another filter

我需要在数据库的查询中使用“普通”WHERE和IN子句按不同字段过滤一些实体,但我不知道如何使用EF进行过滤

这是一种方法:

数据库表

EF中所需的SQL查询

EF代码

using (DatabaseEntities db = new DatabaseEntities ())
{
    return db.Licenses.Where(
        i => i.license == mylicense 
           // another filter          
        ).ToList();
}
我试过使用ANY和CONTAINS,但我不知道如何使用EF

如何在EF中执行此查询?

int[] ids = new int[]{1,2,3,45,99};
using (DatabaseEntities db = new DatabaseEntities ())
{
    return db.Licenses.Where(
        i => i.license == mylicense 
           && ids.Contains(i.number)
        ).ToList();
}

应该可以工作

Thx!!我尝试了相反的方法:I.number.Contains(…)。我快疯了…@Sprague,当你使用
IQueryable
时,你的代码被编译成一个表达式树,而不是准备运行IL代码。EF分析表达式树,并在运行时将其转换为SQL查询。即使是琐碎的查询也需要这样做,这里的
contains
技巧并不比EF提供程序可以识别并转换为SQL查询的任何其他模式更特殊。
ids.contains(i.number)
ids
包含大量元素时效果不佳。EF将其转换为
…其中(1=数字)和(2=数字)以及(3=数字)和(45=数字)和…
。一万块真的很糟糕elements@Salem你怎么会这么想?肯定不是
是可能的,但它在(1,2,3,45,99)中被翻译成
数字。尽管在EF5和更早版本中,内部代码对于1000个以上的项目来说效率不高,但在EF6中这是固定的。我有一个10000项的查询,在EF6.1中大约需要70毫秒。不是很快(这是一个需要解析和执行的非常大的查询),但也不是特别慢。这是真正的Albin Sunnanbo,它是一个
。我使用EF4,当我实现一个列表包含时,它是一个desaster。所以为了解决这个问题,有时我确实会编写这样的SQL查询:
contxt.MyEntitySet.SqlQuery(“选择…mycl所在的位置(“”+string.Join(“,”,interscrist)+“)”)”
你说得对,很快我就没有编写可能重复的代码了
using (DatabaseEntities db = new DatabaseEntities ())
{
    return db.Licenses.Where(
        i => i.license == mylicense 
           // another filter          
        ).ToList();
}
int[] ids = new int[]{1,2,3,45,99};
using (DatabaseEntities db = new DatabaseEntities ())
{
    return db.Licenses.Where(
        i => i.license == mylicense 
           && ids.Contains(i.number)
        ).ToList();
}