Заявления дел в запросе LINQ - AnonymousType to String? - PullRequest
2 голосов
/ 14 июля 2011

У меня в основном есть следующее:

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));
}

Однако я получаю следующую область:

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

Статус имеет тип int, но я хотел бы привести его к строке для моего выпадающего списка. Я совершенно новичок во всем этом, как это можно сделать?

1 Ответ

4 голосов
/ 14 июля 2011

Ваш селектор возвращает анонимный тип:

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

Вам нужно вернуть набор строк. Ошибка говорит вам точно, в чем проблема.

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

Редактировать - вы не опубликовали оставшуюся часть метода, но у вас также есть возможность избавиться от объекта контекста, что может вызвать проблемы. Обычно вы заключаете это в using предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...