簡體   English   中英

(C#LINQ)使用電子郵件選擇名字和姓氏

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM