出於某種原因,我似乎無法弄清楚如何使用實體框架來選擇單個行。實體框架選擇行
以下是我有:
數據庫:ItemSchema
包含Defindex
,Name
,MarketPrice
我需要根據Defindex
我已經有選擇Name
。
所以我想匹配Defindex
與記錄,並從該記錄檢索名稱。
出於某種原因,我似乎無法弄清楚如何使用實體框架來選擇單個行。實體框架選擇行
以下是我有:
數據庫:ItemSchema
包含Defindex
,Name
,MarketPrice
我需要根據Defindex
我已經有選擇Name
。
所以我想匹配Defindex
與記錄,並從該記錄檢索名稱。
您可以使用FirstOrDefault
或SingleOrDefault
(如果不應該有多個行符合Defindex值)從表中獲取一行:
var row = context.TableName.FirstOrDefault(r => r.Defindex == value);
if (row != null)
// use row.Name;
如果您正在使用SQL Server的默認EF供應商,那麼這將生成SQL查詢
SELECT TOP (1)
[Extent1].[Defindex] AS [Defindex],
[Extent1].[Name] AS [Name],
[Extent1].[MarketPrice] AS [MarketPrice]
FROM [dbo].[TableName] AS [Extent1]
WHERE [DefIndex].[Id] > @value
同樣的查詢也可以寫成這樣
var row = context.TableName.Where(r => r.Defindex == value)
.FirstOrDefault();
SingleOrDefault
將嘗試選擇前2個結果,如果返回多個行,它將引發異常。
var defIndex=3; //your value
var item=yourDbContext.ItemSchemas.FirstOrDefault(s=>s.DefIndex==defIndex);
if(item!=null)
{
//Record exists.Let's read the Name property value
string theName=item.Name;
// do something with theName now
}
假設你的DbContext對象都有一個名爲ItemSchemas
謝謝(ItemSchema的)的集合。它工作正常。 r =>是什麼?這似乎是讓我陷入困境的原因。 – Coffman34
@ Coffman34是[lambda表達式](http://msdn.microsoft.com/zh-cn/library/bb311046.aspx),它被轉換爲[Expression](http://msdn.microsoft.com/zh-cn/ us/library/bb335710(v = vs.110).aspx)當您使用Queryable類型(即查詢數據庫)時。 Linq to Entities根據您傳遞給它的表達式樹建立SQL查詢 –