实体框架6:过滤表格

时间:2014-10-15 10:49:34

标签: c# sql entity-framework entity-framework-6

我',接近EF6。我已经理解,如果我想要一条记录,我可以使用First()方法(也可以像#" get",我认为)。

但是,如果我想从我的桌子收集记录怎么办?我的意思是,如果查询的结果可以有从0到N的基数......我该怎么办?

愚蠢的例子:

名称表:SomeTable

ID    NAME    SOMEATTR
1      A       YELLOW
2      B        RED
3      C       YELLOW
4      D       YELLOW
5      E        BLUE

...

我怎样才能获得someAttr所在的所有记录"黄色"?

3 个答案:

答案 0 :(得分:1)

获得Linq查询后......

var query = (from ... in ... where ... select ...);

或者,对于您的具体示例:

var query = (from r in dbContext.MyTable where (r.someAttr == "YELLOW") select r);

您可以使用foreach迭代它,这将导致它执行一次然后产生结果...

foreach (var r in query)
{
}

...或致电ToList()http://msdn.microsoft.com/en-us/library/vstudio/bb342261(v=vs.100).aspx),如果您想获取一个可以在以后传递,操纵或检查多次的列表。 (该列表在返回后基本上与服务器断开连接。)

var list = query.ToList()

...或者用它来构建像HashSet<T>http://msdn.microsoft.com/en-us/library/bb301504(v=vs.110).aspx

这样的集合
var set = new HashSet<T>(query)

其中任何一个都会导致它只在服务器上执行一次,并处理结果。

毕竟,查询本身是IEnumerable。它也是IQueryable所以你可以进一步操纵它,然后枚举结果,比如......

var sortedList = query.OrderBy(...).ToList()

答案 1 :(得分:1)

使用linq&amp; C#

private readonly myEntities db = new myEntities()
public list<SomeTable> MyRecords()
{
 return res = db.SomeTables.where(o => o.SOMEATTR == "YELLOW").ToList()
}

答案 2 :(得分:0)

如果您有SOMEATTR类映射到SOMEATTR表,则可以查询它:

var context = new YourDbContext();
var results = context.SomeTables.Where(x=>x.SOMEATTR == "Yellow").ToList();

//then you can iterate all results
foreach(var item in results)
{
    Console.WriteLine(item.ID + " " + item.NAME + " " + item.SOMEATTR);
}

结果将是:

1      A       YELLOW
3      C       YELLOW
4      D       YELLOW