将Linq查询转换为列表时出错

时间:2013-02-28 17:18:12

标签: linq list entity-framework-4

这是我的代码。我想将列表保存在会话变量中以便以后进行身份验证(它是用户有权访问的对象列表....)我收到一条错误消息,说明它无法将System.Collections.Generic.List转换为'System。 collections.Generic.List。帮助

    protected void Session_Start(object sender, EventArgs e)
    {
        string strUserName = User.Identity.Name;
        string strShortUserName = strUserName.Replace("WINNTDOM\\", string.Empty).ToUpper();
        System.Web.HttpContext.Current.Session["strShortUserName"] = strShortUserName;
        System.Web.HttpContext.Current.Session["strUserName"] = strUserName;
        List<string> authorizedObjects = new List<string>();
        using (CPASEntities ctx = new CPASEntities())
        {
            var w = (from t in ctx.tblUsers
                     where (t.UserPassword == strUserName)
                     select t).FirstOrDefault();
            if (!(w==null))
            {
                authorizedObjects = (from t in ctx.qryUserObjectAuthorization
                                         where (t.UserPassword == strUserName)
                                         select new {  n = t.ObjectName }).ToList();

            }
        }
    }

3 个答案:

答案 0 :(得分:1)

authorizedObjectsList<string>,但您尝试将其用作匿名类型列表:

List<string> authorizedObjects = new List<string>();

(...)

authorizedObjects = (from t in ctx.qryUserObjectAuthorization
                     where (t.UserPassword == strUserName)
                     select new {  n = t.ObjectName, i = t.ObjectID }).ToList()

将您的查询更改为:

authorizedObjects = (from t in ctx.qryUserObjectAuthorization
                     where (t.UserPassword == strUserName)
                     select t.ObjectName).ToList()

答案 1 :(得分:1)

您正在初始化List<string>对象,但填充了不同的对象。

List<string> authorizedObjects = new List<string>();

select new {  n = t.ObjectName, i = t.ObjectID } <--construct a class with these properties and initialize `List<WithNewClassName>`

答案 2 :(得分:1)

要将其生成为字符串列表,请使用

authorizedObjects = (from t in ctx.qryUserObjectAuthorization
                     where (t.UserPassword == strUserName)
                     select t.ObjectName).ToList();