1

私は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
                        };

すべて同じ結果で、誰かが私の間違いを手伝ってくれますか? 前もって感謝します

4

1 に答える 1

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;
于 2013-07-10T06:54:44.243 に答える