2 votes

Case Statements in LINQ query - AnonymousType to String ?

J'ai essentiellement les éléments suivants :

public ActionResult Search(string searchString, string clientNo, int status = -1)
{
    var statusLst = new List<string>();
    var statusNoQry = from b in db.Briefs
                      orderby b.Status
                      select new  
                      {
                          status = (
                            b.Status == 0 ? "Requested" :
                            b.Status == 1 ? "In Progress" :
                            "Undefined"
                            )
                      };
    statusLst.AddRange(statusNoQry.Distinct()); <<--- ERROR HERE
    ViewBag.status = new SelectList(statusLst);

    var ClientNoLst = new List<string>();
    var ClientNoQry = from b in db.Briefs
                      orderby b.Client_No_
                      where b.Client_Type == 0 
                      select b.Client_No_;
    ClientNoLst.AddRange(ClientNoQry.Distinct());
    ViewBag.clientNo = new SelectList(ClientNoLst);

    var briefs = from b in db.Briefs
                 select b;

    Session["searchString"] = searchString;
    Session["clientNo"] = clientNo;
    if (!String.IsNullOrEmpty(searchString))
    {
        briefs = briefs.Where(s => s.Client_No_.Contains(searchString) || s.Name.Contains(searchString));
    }

    if ((status > -1) && (status < 10))
    {
        briefs = briefs.Where(y => y.Status == status);
    }

    if (string.IsNullOrEmpty(clientNo))
        return View(briefs);
    else
        return View(briefs.Where(x => x.Client_No_ == clientNo));
}

Cependant, je reçois la zone suivante :

Error   7   Argument 1: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<string>'

L'état est de type int mais je voudrais le convertir en chaîne pour ma liste déroulante. Je suis assez novice en la matière, quelle est la meilleure façon d'y parvenir ?

4voto

asawyer Points 10642

Votre sélecteur renvoie un type anonyme :

select new  
{
    status = (
    b.Status == 0 ? "Requested" :
    b.Status == 1 ? "In Progress" :
    "Undefined"
    )
};

Vous devez cependant renvoyer un ensemble de cordes. L'erreur vous indique exactement quel est le problème.

select 
    (b.Status == 0 ? "Requested" :
    b.Status == 1 ? "In Progress" :
    "Undefined");

Edit - Vous n'avez pas posté le reste de la méthode, mais d'après ce que vous avez, vous ne disposez pas non plus de votre objet de contexte, ce qui peut causer des problèmes. Normalement, vous enveloppez cela dans un using clause.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X