return db.Orders.Where(o => o.Customer == User.Identity.Name);
o
從何而來?有時我會看到這種形式與其他字母一起使用,如c
? 這是可交換的嗎? User.Identity.Name
從哪裏來?ASP.NET Entity Framework DB查詢語法
return db.Orders.Where(o => o.Customer == User.Identity.Name);
o
從何而來?有時我會看到這種形式與其他字母一起使用,如c
? 這是可交換的嗎? User.Identity.Name
從哪裏來?ASP.NET Entity Framework DB查詢語法
通過使用lambda表達式,你可以寫,可以作爲參數傳遞或返回函數調用的價值本地函數。
在你的情況,你正在使用
db.Orders.Where(o => o.Customer == User.Identity.Name);
在地方的o
你可以使用任何你想要的字符和字符將被表現爲集合類型,即實例。這裏您使用的是Orders
的集合,因此o
將表現爲Order
類的實例。
o從哪裏來?
Where
需要一個Func
委託,它接受您正在使用的任何集合類型的實例。在這種情況下,它將是Func<Order, bool>
。您的Lambda語句聲明一個與委託相匹配的匿名函數。 o
只是Order
輸入。你可以隨便命名。如果您在長手寫出來的功能,它看起來是這樣的:
public bool AnonymousFunction(Order o)
{
return o.Customer == User.Identity.Name;
}
如果您使用LINQ到對象查詢,該委託將被調用每個元素的發現在的那些匹配的集合。如果您正在查詢LINQ to SQL(或其他查詢提供程序),則您的委託將被轉換爲表達式樹,該樹將用於生成實際的查詢語法。
User.Identity.Name從何而來?
我假設你在某種Web應用程序中,並且User.Identity正在從Forms Authentication令牌中提取已登錄的用戶信息。
=>
運算符用於定義lambda表達式 - 本質上是內聯函數。這相當於內嵌的:
public bool Myfunc(Order o)
{
return o.Customer == User.Identity.Name;
}
的類型o
從傳遞到Where
的Func
的參數類型推斷。在這種情況下,類型將爲Order
,因爲IEnumerable<Order>.Where()
需要Func<Order, bool>
,Order
作爲輸入,bool
作爲輸出。
實際的字母並不重要。一個很好的慣例是使用與源類型相關的標識符,因此o
或order
將是不錯的選擇。
User
可能是該函數所在類的屬性(即Page
),並且User.Identity.Name
是與用戶關聯的標識的名稱。
所有提供的答案都是正確的。我只是試圖解釋你有關語句簡單的語言:通過寫db.Orders
然後你在使用Where
裏面Where
您指定的表把一個條件
您正在訪問的Order表條件。這是使用lambda表達式完成的。 Lambda表達式只不過是一種說法,我將每行稱爲o(或者可以是任何東西,它可以是x,y,abc,任何東西,它只是一個名稱),並且爲此(=>)檢查if o.Customer等於當前登錄的用戶。
如果是,請將所有符合此條件的行返回給我。
這不是特定於實體。搜索Lambda表達式。這就是這個。但它基本上只是一個功能。 'o'是你傳遞給函數的東西。 –
查看本[相關問題](http://math.stackexchange.com/q/646238)。 –