我正在使用Entity Framework开发我的第一个MVC应用程序。我有一个表USERS和一个表RESTRICTIONS
在我的控制器中,我写了一个函数,它返回两个用户之间的常见限制数:
public int common_restrictions(int id1, int id2)
{
MyModel bd = new MyModel();
int count= 0;
var restrictions = from c in bd.RESTRICTIONS where c.ID_USER == id1
select c;
var restrictions2 = from c in bd.RESTRICTIONS where c.ID_USER == id2
select c;
foreach (var prop in restrictions)
{
var nr = restrictions2.Count(p => p.ID_PROP == prop.ID_PROP);
if (nr != 0)
{
count++;
}
}
return count;
}
该功能按预期工作。 现在在同一控制器中的另一个函数中,我想按照与特定用户的共同限制的降序对用户列表进行排序(假设用户的ID为12)。我在查询中获得了用户列表,但我不知道如何在那之后对它们进行排序
var query = from u in bd.USERS where u.ID != 12
select u;
// sort the list??
我试过
var query = from u in bd.USERS orderby(common_restrictions(u.ID,
12)) select u;
但是我收到以下错误消息:
“LINQ to Entities无法识别方法'Int32 common_restrictions(Int32,Int32)'方法,并且此方法无法转换为商店表达式。”
答案 0 :(得分:0)
如果您不想在User对象中包含其他属性,则需要分两步执行此操作。我认为以下方式更容易。
var query = (from u in bd.USERS where u.ID != 12
select u).ToList();
var unSorteUsers = (from u in query
select new
{
User = u,
CR = common_restrictions(u.ID,12)
});
var sortedUsers = (from u in unSorteUsers
orderby u.CR
select new User
{
ID = u.User.ID,
//All other properties.
});