实体框架 - ElementAt

时间:2013-03-13 15:29:46

标签: entity-framework

我有一个表用户(ID,名称....),项目(ID,名称,时间戳,IsFavorite ...),Projects_Favoite(UserID,ProjectID)

我尝试检查每个projekt是否有当前用户的行。如果有一行,我想在我的项目中设置“IsFavorite”,否则为false。

我并列:

 for(int i = 0; i <= erg.Count();i++)
 {
     if (erg.ElementAt(i).User11.Any(u => u.Guid == ID) == true) 
         erg.ElementAt(i).SetFavorite = true; 
 }

但是没有办法使用ElementAt,因为它无法转换为SQL。 所以我试过了:

 for(int i = 0; i <= erg.Count();i++)
 {
     if (erg.Take(i).Last().User11.Any(u => u.Guid == ID) == true)
         erg.Take(i).Last().SetFavorite = true; 
 }

这里也有同样的问题,所以我试过了:

foreach (Project project in erg)
{
     if (project.User11.Any(u => u.Guid == ID))
          project.SetFavorite = true;
}

存在同样的问题。有没有办法实现ElementAt?

2 个答案:

答案 0 :(得分:0)

你应该可以这样做:

foreach (Project project in erg.Where(p => p.User11.Any(u => u.Guid == ID))
                               .ToList())
    project.SetFavorite = true;
}

答案 1 :(得分:0)

假设erg是IQuerable而不能使用ElementAt,因为它不受支持(http://msdn.microsoft.com/en-us/library/bb399342.aspx检查操作员没有翻译部分),你可以在列表中使用它,但当然您将失去延迟查询的好处。 尝试使用Skip代替

var whatyouwant = erg.Skip(index).First();

通过查看堆栈跟踪(虽然不能读取德语),看起来SetFavorite列有问题。首先尝试删除此位:

 project.SetFavorite = true;

然后检查您的模型列是否与数据库中的内容匹配。