【问题标题】:Unable to retrieve values using Lambda Expression无法使用 Lambda 表达式检索值
【发布时间】:2011-11-02 21:54:42
【问题描述】:

我的问题是我想获取 Linq Resultant 的实体值。下面是我的方法

我的数据层方法:

private static readonly Func<DataContext, String, String, IQueryable<AuthenticateUserResult> > AuthenticateUser__impl= CompiledQuery.Compile((DataContext context, String username, String password) => 
(   from u in context.GetTable<Yantriki.MeriRanchi.Web.UI.Core.User>()
    where ((u.UserName == username)
         && (u.Password == password)
         && (u.IsActive == true))
    select new AuthenticateUserResult 
    {
        MemberId = u.MemberId,
        Email = u.Email,
        Name = u.Name,
        Role = u.Role,
        UserName = u.UserName
    }));

以上代码由 Visual Linq Designer 生成。现在我使用以下方法将结果返回给 UI 层:

   public static IQueryable AuthenticateUser(User user)
        {
            var db = new MeriRanchiDataContext();
            return MeriRanchiQueries.AuthenticateUser(db, user.UserName, user.Password);
        }

在我的 UI 层,我需要存储在实体、MemberId、Email、Name 中的值,以便我可以将其设置为会话。那么这将是什么表达方式。

【问题讨论】:

    标签: c# asp.net linq lambda


    【解决方案1】:

    返回通用 IQueryable&lt;AuthenticateUserResult&gt; 而不是非通用 IQueryable

    【讨论】:

    • 我这样做了,但在获取实体时出现空引用异常。
    • 空引用异常与返回类型无关。
    • 不带返回类型...它出现在我应用 lambda 表达式获取结果时。
    【解决方案2】:

    您好,我正在回答我自己的问题,因为我得到了解决方案,并认为它可能会帮助其他面临同样问题的人。

    我做了什么?

    1. 我将返回类型恢复为IQueryable&lt;AuthenticateUserResult&gt;
    2. 添加 SingleOrDefault() 作为扩展。
    3. 使用下面的代码

    var userResults =
        MeriRanchiDataManager.AuthenticateUser(user).SingleOrDefault();
    
    Session["UserName"] =userResults.MemberId;
    Session["Email"] = userResults.Email;
    Session["Role"] = userResults.Role.ToString();
    Session["MemberId"] = userResults.MemberId.ToString();
    Session["Name"] = userResults.Name;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多