2009-07-27 6 views
0

J'ai des enregistrements qui ont "FirstName" et "LastName" pour les individus, et "CompanyName" pour les entreprises. Les deux enregistrements se trouvent dans une seule table et je sais s'il s'agit d'une société ou d'un individu via un champ IsCompany Bit dans ma table.SQL/C# MVC: Commande sur plusieurs champs

Le problème que je face aujourd'hui est que je dois montrer à ceux dans une ordonnée grille, sous la forme:

Last Name, First Name 

or (if it's a company) 

Company Name 

Ce n'est pas une grille « réelle », la simple table qui est côté serveur rendu. Comment puis-je commander ce (via SQL/LINQ?) Pour que je l'obtenir commandé correctement, par exemple:

Fizz, Marc    (INDIVIDUAL) 
Fields, Jonathan   (INDIVIDUAL) 
Futile Resistance Inc. (COMPANY) 
Fyat, Abel    (INDIVIDUAL) 

Je vous remercie de votre aide les gens .... un moment difficile avec ce moment :(

Répondre

2
SELECT CASE WHEN IsCompany = 1 THEN Company 
    ELSE LastName + ', ' + FirstName END AS DisplayName 
FROM MyTable 
ORDER BY DisplayName 
+0

Est-ce que je peux faire ceci avec LINQ? – Alex

+0

@Alex: C'est SQL côté serveur. Je ne suis pas sûr de la méthode pour l'appeler depuis LINQ. –

1

si vous utilisez Linq2Sql

var results = datacontext.TableName.OrderBy(a => a.IsCompany ? a.CompanyName : a.LastName + ", " a.FirstName); 
+0

Mais cela nécessiterait que je renvoie d'abord tous les enregistrements de la base de données dans la couche d'application? J'essaye de toujours obtenir seulement les disques dont j'ai besoin de MSSQL – Alex

2

vous pensez à LINQ to SQL? Dans ce cas, créer une classe partielle avec une propriété DisplayName construit hors du suggéré FirstName, l astName, IsCompany et la logique de l'entreprise. Vous souhaiterez utiliser l'espace de noms et le nom de classe partielle tels qu'ils se trouvent dans le fichier du concepteur. This post peut être utile.

Questions connexes