无法使用Lambda Expression检索值

时间:2011-08-24 15:04:34

标签: c# asp.net linq lambda

我的问题是我想获取Linq结果的实体价值。以下是我的方法

我的数据层方法:

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中的值,以便我可以将其设置为session。那将是什么表达。

2 个答案:

答案 0 :(得分:2)

返回通用IQueryable<AuthenticateUserResult>而非非通用IQueryable

答案 1 :(得分:0)

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

我做了什么?

  1. 我将返回类型还原为IQueryable<AuthenticateUserResult>
  2. 添加了SingleOrDefault()作为扩展名。
  3. 使用以下代码

  4. 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;