2012-04-19 9 views
10

Ich bin neu in LinQ und diese lambdas erscheinen schwierig zu mir :(Concatenate zwei Spaltenwerte in LinQ Lambda Expression

Ich habe eine Tabelle, wo es zwei Spalten. First_Name und Last_name. Ich bevölkern ein gridview mit LinQ.

protected void Page_Load(object sender, EventArgs e) 
    { 
     myLinQtoSQLClassDataContext objDataContext = new myLinQtoSQLClassDataContext(); 

     var allUserList = from CurrentUser in objDataContext.Users.Where(c => c.Is_Deleted != false)        
          select new 
          { 
           CurrentUser.First_Name, 
           CurrentUser.Last_Name, 
           CurrentUser.Email_ID, 
           CurrentUser.GUID 
          }; 

     GridView1.DataSource = allUserList; 
     GridView1.DataBind();        
    } 

kann ich die Werte mit LinQ abrufen, aber ich möchte mit einem Raum den Vornamen und Nachnamen verketten dazwischen.

die äquivalente SQL-Abfrage, was ich versuche zu acchieve wie wäre dies:

Select First_name + ' ' + Last Name as Username, Email_ID, GUID 
From tbl_Users where Is_Deleted != false 

Wie kann ich dies durch den Lambda-Ausdruck erreichen?

+1

In SQL sollten Sie normalerweise '' ''verwenden, um eine Zeichenfolge zu bezeichnen, die ein Leerzeichen enthält, nicht' "". –

+0

wow, wenn alle so einfach wären – Habib

+0

auch aussehen: http://pranayamr.blogspot.ca/2010/12/sql-to-linq-visual-representation.html könnte Ihnen helfen, mehr Informationen über linq –

Antwort

14

Sie String-Verkettung verwenden können:

select new 
{ 
    Username = CurrentUser.First_Name + " " + CurrentUser.Last_Name, 
    CurrentUser.Email_ID, 
    CurrentUser.GUID 
}; 
4

Versuchen

 select new 
      { 
          FullName = CurrentUser.First_Name + " " + CurrentUser.Last_Name, 
          CurrentUser.Email_ID, 
          CurrentUser.GUID 
      }; 
+0

Danke euch allen, alle Lösungen funktionieren gut. Ich wünschte, ich könnte sie alle als richtig markieren, aber ich kann nur eins markieren :( –

1

Sie sollten Ihre anonymous type 'Schlüssel' geben (read-only Eigenschaften):

select new 
{ 
    Name = CurrentUser.First_Name + " " + CurrentUser.Last_Name, 
}; 

Und dann nur Verketten Sie die Zeichenfolge beim Zuweisen des Benutzernamens.

2
var allUserList = from CurrentUser in objDataContext.Users.Where(c => c.Is_Deleted != false)        
        select new 
        { 
         Name = CurrentUser.First_Name + " " + CurrentUser.Last_Name, 
         CurrentUser.Email_ID, 
         CurrentUser.GUID 
        }; 
1

haben einen Blick auf diese CLR Method to Canonical Function Mapping
.Net viele Methoden bereitstellt, die auf die Anfragen direkt zugeordnet werden können ull haben einen von ihnen zu verwenden, um zwei Strings hinzuzufügen
so eine, die u verwenden können, ist

select new 
{ 
    Username = Concat(first_Name,Last_Name), 
    CurrentUser.Email_ID, 
    CurrentUser.GUID 
}; 
0

Hier ist eine andere Variation, die nicht aufgeführt worden funktioniert und hat:

var allUserList = objDataContext.Users.Where(c => c.Is_Deleted != false). 
    Select(s => new{First_Name + " " + Last_Name, Email_ID, GUID}); 
+1

'var allUserList = objDataContext.Users.Where (c => c.Is_Deleted! = False) .Wählen (s => new {FullName = First_Name + "" + Last_Name, Email_ID, GUID}); 'arbeitete für mich. Ich musste FullName als Feld hinzufügen –