[英]Entity Framework 6: filter a table
我正在接近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為“黃色”的所有記錄?
一旦您有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/zh-cn/library/vstudio/bb342261 ToList()
.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()
使用linq和C#
private readonly myEntities db = new myEntities()
public list<SomeTable> MyRecords()
{
return res = db.SomeTables.where(o => o.SOMEATTR == "YELLOW").ToList()
}
如果您有一個映射到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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.