【发布时间】:2013-07-06 21:26:24
【问题描述】:
我是使用 C#、linq 的新手。我正在尝试将用户名添加到查询中以将其显示为 ListView 的数据源的一部分,我已经测试了几种加入方式,但总是收到下一个错误:
“无法创建类型为‘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
};
所有结果都相同,有人可以帮我解决我的错误肯定会非常明显。提前致谢
【问题讨论】:
-
EF 正在尝试在 SQL 查询中转换您的表达式(订单加入类别),但在尝试本地用户集合时失败
-
感谢您的回答。但是有没有一种方法可以将本地集合转换为我尝试执行的查询的一部分?。
-
我不这么认为。就个人而言,我会从您的 linq 表达式中删除与用户的连接,并迭代 DDLsource(手动或在新的 l2o 查询中)以操作其余数据(用户名)。
-
这可能是个坏消息...我的意图是在一个简单的 ListView 中显示订单的一些信息以及添加它们的人的姓名。这就是为什么我试图把所有的信息放在一起。当您说剪切时,您的意思是分开我的查询,为页面中的每一行(在用户列中)插入一个 DDL 并选择用户?,作为页面级选择。