0

我有一个表 User(ID, Name....), Projects(ID, Name, Timestamps, IsFavorite...), Projects_Favoite(UserID, ProjectID)

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

我绑:

 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?

4

2 回答 2

0

你应该能够做到:

foreach (Project project in erg.Where(p => p.User11.Any(u => u.Guid == ID))
                               .ToList())
    project.SetFavorite = true;
}
于 2013-03-13T15:37:16.157 回答
0

假设 erg 是一个IQuerable比你不能使用 ElementAt 因为它不受支持(http://msdn.microsoft.com/en-us/library/bb399342.aspx 检查没有翻译的操作符部分),你可以在一个列出虽然,但当然你会失去延迟查询的好处。尝试Skip改用

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

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

 project.SetFavorite = true;

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

于 2013-03-13T15:38:49.227 回答