LINQ查询中的案例语句 - AnonymousType to String?

时间:2011-07-14 11:39:12

标签: asp.net linq visual-studio-2010

我基本上有以下内容:

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 个答案:

答案 0 :(得分:4)

您的选择器返回匿名类型:

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子句中。