从MembershipUser检索用于连接查询的用户名

时间:2013-07-06 21:26:25

标签: c# asp.net linq

我是较新的使用C#,linq。我正在尝试将UserName添加到查询中以将其显示为ListView的DataSource的一部分,我已经测试了几种方式加入,但总是我正在接受下一个错误:

“无法创建类型'Web.Admin.system.User'的常量值。在此上下文中仅支持基本类型或枚举类型。”

我的代码是:

//Entities

public class Category
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class Order
{
    public Guid Id { get; set; }
    public string Description { get; set; }
    public Guid CategoryId { get; set; }
    public Guid UserId { get; set; }
 }

//class added just for getting the user list  (possibly, I do not need)
public class User
{
    public Guid Id { get; set; }
    public String Name { get; set; }
}

这是我准备过滤器的代码

  //retrieve the data from Order and Category
  IQueryable<Order> orders = orderService.GetAllOrders();
  IQueryable<Category> category = categoryService.GetAllCategories();
  //obtain the users
  MembershipUserCollection members = Membership.GetAllUsers();

  // 1st option for managing users directly with memberShip variable
  var memberShip = members.Cast<MembershipUser>().ToDictionary(m => m.ProviderUserKey, m => m.UserName).AsQueryable();

  // 2nd option, I have added this code to see if I could manage the users as a list
  List<User> users = new List<User>();
  foreach (var _member in memberShip)
        {
            users.Add(new User { Id = (Guid)_member.Key, Name = _member.Value });
        }

  //Getting information to fill a listview
        var DDLsource = from i in orders
                        join c in category on i.CategoryId equals c.Id
                        join u in users on i.UserId equals u.Id // 1st I tried to use memberShip directly but gave me error of types
                        select new
                        {
                            i.Id,
                            i.Description,
                            CategoryName = c.Name,
                            UserName = u.Name
                        };
        ListViewOrders.DataSource = DDLsource.ToList();

这是错误被触发的地方,我正在尝试理解错误并做其他解决方案,我测试了这样的查询:

示例2

        var DDLsource = from i in orders
                        join c in category on i.CategoryId equals c.Id
                        select new
                        {
                            i.Id,
                            i.Description,
                            CategoryName = c.Name,
                            UserName = (from u in users where u.Id == i.UserId select u.Name)
                        };

示例3

        var DDLsource = from i in orders
                        join c in category on i.CategoryId equals c.Id
                        join u in Membership.GetAllUsers().Cast<MembershipUser>() on i.UserId equals ((Guid)u.ProviderUserKey)
                        select new
                        {
                            i.Id,
                            i.Description,
                            CategoryName = c.Name,
                            UserName = u.UserName
                        };

所有结果都相同,有人可以帮助我,我的错误肯定会非常明显。提前致谢

1 个答案:

答案 0 :(得分:0)

我会做这样的事情(对不起,未经测试的代码......):

var DDLsource = 
  from i in orders
  join c in category on i.CategoryId equals c.Id
  select new
  {
    i.Id,
    i.Description,
    CategoryName = c.Name,
    i.UserId,
    UserName = ""
  };

foreach(var ddl1 in DDLsource)
  ddl1.UserName = Membership.GetUser(ddl1.UserId).Name;
相关问题