使用某些条件过滤SelectListItem值

时间:2012-12-11 14:45:41

标签: asp.net-mvc-3 linq entity-framework-4 html-select

我有一个用于DropDownList的SelectListItem。我必须根据某些条件进行过滤。如果我尝试添加条件然后它给我一个这样的错误(LINQ to Entities无法识别方法' System.String ToString()'方法,并且此方法无法转换为商店表达式) 。我将在这里添加该代码。请指导我解决这个问题。

代码

    IEnumerable<SelectListItem> IssueId = (from txt in Db.Issues where txt.BibId == BibId
            select new SelectListItem()
        {
            Text = txt.Description,
            Value = txt.Id.ToString(),
            Selected = true,
        });
        SelectList IssueIds = new SelectList(IssueId, "Value", "Text");
        ViewBag.IssueId = IssueIds;

由于

3 个答案:

答案 0 :(得分:1)

试试这个:

LINQ2EF不知道ToString()但是在AsEnumerable()之后,当实现ToString()时,你将得到一个本地集合。

        IEnumerable<SelectListItem> IssueId = 
(from txt in Db.Issues.Where(e => e.BibId == BibId).AsEnumerable()
    select new SelectListItem()
    {
        Text = txt.Description,
        Value = txt.Id.ToString(),
        Selected = true     
});

答案 1 :(得分:0)

Linq To Sql无法为txt.Id.ToString()

生成TSQL

您需要在执行查询后迭代结果,或者像xeondev建议的那样强制转换为Enumerable。

答案 2 :(得分:0)

这个扩展名似乎没有按照linq对实体进行排序,但是一旦遇到问题就可以进行映射,例如

var issues = (from issue in Db.Issues 
               where issue .BibId == BibId 
               select issue ).ToList();     

IEnumerable<SelectListItem> IssueId = (from txt in issues 
                                       where txt.BibId == BibId
                                      select new SelectListItem()
                                      {
                                        Text = txt.Description,
                                        Value = txt.Id.ToString(),
                                        Selected = true,
                                      });