[英](C# LINQ) Select firstname and lastname using email
我對LINQ和SQL查詢非常陌生,現在已經在互聯網上搜索了大約2個小時,試圖找到問題的答案,這就是為什么我在這里發布。
我試圖通過使用我知道其值的用戶的電子郵件地址在LINQ查詢中獲取用戶的名字和姓氏。
一個例子是:
using (userEntities db = new userEntities())
{
var query = from o db.Users
where o.email == userEmail
select o;
if (query.SingleOrDefault() != null)
{
...
}
}
這只會選擇電子郵件地址,然后如何使用該行並獲取名字和姓氏?
在此先感謝您。
您有一個db Object,該對象具有一個名為Users的序列,其中序列中的每個元素都是一個User,該User具有一個名稱為email的屬性。
顯然,每個用戶還具有其他兩個屬性:firstName和lastName。
在linq中,只要您有一系列的“事物”,並且只想要與某個謂詞匹配的“事物”,就可以使用功能Where,就像您所做的一樣。
如果您有一系列的“事物”,並且要針對每個“事物”創建一個基於原始“事物”的“其他事物”,則可以使用“選擇”功能。 在Linq中將一個輸入元素轉換為一個輸出元素稱為Projection。 使用選擇功能,可以將輸入序列中的每個元素投影(轉換)為輸出序列中的一個元素
因此,如果要使用您的事物的firstName和lastName創建一個“其他事物”,請執行以下操作:
class UserName
{
public string firstName {get; set;}
public string lastName {get; set;
}
var result = db.Users
.Where(user => user.email == useremail)
.Select(user => new UserName()
{
FirstName = user.FirstName,
LastName = user.LastName,
});
我將每個與userEmail匹配的用戶創建一個UserName類的新對象,該對象包含每個用戶的FirstName和LastName。
上面使用的方法意味着,對於要在Select語句中使用的每個投影,都必須定義一個類。 這很麻煩,尤其是如果您僅在非常有限的空間中使用語句的結果時,例如僅在創建新對象的過程中使用。
如果您不必將查詢結果傳遞給其他函數,而只需要在此函數中使用它(更精確地說:不需要形式參數),則無需聲明UserName類。 您可以使用匿名類型。 匿名類型使您不必定義要投影的類型即可進行選擇:
var matchingUserNames = db.Users
.Where(user => user.email == useremail)
.Select(user => new
{
FirstName = user.FirstName,
LastName = user.LastName,
});
foreach (var matchingUserName in matchingUserNames)
{
Console.WriteLine(matchingUserName.FirstName + ' '
+ matchingUserName.LastName);
}
請注意,我省略了類的名稱。 因此,您無法將結果傳遞給具有類型名稱的對象。 實際上,您現在關於結果的唯一一件事就是它是一系列對象,其中每個對象都有兩個屬性:FirstName和LastName。 FirstName與user.FirstName具有相同的類型; 姓氏與use.LastName具有相同的類型
對於匿名類型,請參見匿名類型的樂趣
另一篇幫助我了解linq的文章是標准Linq運算符
query.SingleOrDefault()
將返回該行(如果存在)。 將其分配給變量,並在進行null
檢查后使用以獲取所需的信息。
var query = from o db.Users
where o.email == userEmail
select o;
var result = query.SingleOrDefault();
if (result != null)
{
... // result.UserName, etc.
}
將query
視為對數據庫的問題,該問題在枚舉時將執行查詢,並返回符合搜索條件的User
集合。
當您執行query.FirstOrDefault()
您正在枚舉查詢,要求第一個滿足您條件的用戶(如果有)。
因此,回答您的問題,您可以執行以下操作:
User user = query.FirstOrDefault();
if (user != null)
{
var name = user.FirstName + " " + user.LastName;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.