2013-12-16 174 views
0

出於某種原因,我似乎無法弄清楚如何使用實體框架來選擇單個行。實體框架選擇行

以下是我有:

數據庫:ItemSchema包含DefindexNameMarketPrice

我需要根據Defindex我已經有選擇Name

所以我想匹配Defindex與記錄,並從該記錄檢索名稱。

回答

2

您可以使用FirstOrDefaultSingleOrDefault(如果不應該有多個行符合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個結果,如果返回多個行,它將引發異常。

+1

謝謝(ItemSchema的)的​​集合。它工作正常。 r =>是什麼?這似乎是讓我陷入困境的原因。 – Coffman34

+0

@ 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查詢 –

0
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