C# 从列表强制转换为SelectListItem

C# 从列表强制转换为SelectListItem,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我需要将从DB获得的列表强制转换为SelectListItem,以便在下拉列表中显示它。我尝试了以下代码 public List<SelectListItem> Liste_proprietaire() { List<SelectListItem> selectList = new List<SelectListItem>(); var maListe = (from p in db.reqopt wher

我需要将从DB获得的列表强制转换为
SelectListItem
,以便在下拉列表中显示它。我尝试了以下代码

public List<SelectListItem> Liste_proprietaire()
{
    List<SelectListItem> selectList = new List<SelectListItem>();
    var maListe = (from p in db.reqopt
                   where (p.categorie.Contains("proprietaire"))
                   select new
                   {
                       str = p.valeur
                   }).ToList();

    foreach (var x in maListe)
    {
        selectList.Add(x);
    }

    return selectList;
}
public List Liste_proprietaire()
{
List selectList=新建列表();
var maListe=(从db.reqopt中的p开始
其中(p.categorie.Contains(“proprietaire”))
选择新的
{
str=p.valeur
}).ToList();
foreach(maListe中的变量x)
{
选择列表。添加(x);
}
返回选择列表;
}

他们在
selectList.Add(x)
下给了我一个错误,告诉我函数
Add
的参数无效。

x
是一个匿名类的实例(使用
new{}
创建)。您无法立即将其转换为
SelectListItem

不过你可以自己做:

selectList.Add(new SelectListItem() { Value = x.str });
或者直接从LINQ表达式创建
SelectListItem
项:

select new SelectListItem()
{
    Value = p.valeur
}

您必须使用
SelectListItem
而不是
anonymous
类型。试试这个

    public List<SelectListItem> Liste_proprietaire()
    {

        List<SelectListItem> selectList = new List<SelectListItem>();

        var maListe = (from p in db.reqopt
                       where (p.categorie.Contains("proprietaire"))

                       select new SelectListItem
                       {
                           Text = p.valeur,
                           Value = p.value //Put your value column here
                       }).ToList();


        foreach (var x in maListe)
        {
            selectList.Add(x);
        }

        return selectList;
    }
public List Liste_proprietaire()
{
List selectList=新建列表();
var maListe=(从db.reqopt中的p开始
其中(p.categorie.Contains(“proprietaire”))
选择新的SelectListItem
{
Text=p.valeur,
Value=p.Value//将您的值列放在这里
}).ToList();
foreach(maListe中的变量x)
{
选择列表。添加(x);
}
返回选择列表;
}

注意:您必须相应地更新
SelectListItem
属性。

您是否查看了Add方法在selectList对象中作为参数的内容?我建议你仔细看看;)您现在应该将恶意软件的对象解析为
SelectListItem
typeYes i,但问题是如何转换它,我已经尝试了该selectList.Add((SelectListItem)x);但那也不管用这和这里的演员无关。。。看看Add方法接受了什么…@Redadublex:不客气。请注意,使用匿名方法可能非常好,但您必须担心强制转换。对于与方法交叉的所有内容,都应创建常规类型。@Redadublex:注意,您可以向上投票。我想他不会介意看到你的感激之词:)