我正在尝试在查询中使用数组而不是列表。但是我必须首先得到计数才能迭代从数据库返回的对象。这是我的代码:
var FavArray = favorites.OrderByDescending(y => y.post_date).Skip((page - 1) * config.MaxRowsPerPage).Take(config.MaxRowsPerPage).ToArray();
int FavArrayCount = FavArray.Count(); //Is this a round trip to the database?
for (int y = 0; y < FavArrayCount; y++)
{
q = new PostType();
q.Title = FavArray[y].post_title;
q.Date = FavArray[y].post_date;
q.PostID = FavArray[y].post_id;
q.Username = FavArray[y].user_username;
q.UsernameLowered = FavArray[y].user_username.ToLower();
q.CategoryID = FavArray[y].catid;
q.CategoryName = FavArray[y].name;
q.TitleSlug = FavArray[y].post_titleslug;
}
正如你所看到的,在我开始迭代之前我需要计数,我担心得到计数我会去数据库。这是真的吗?
答案 0 :(得分:4)
FavArray.Count()不会往返,因为你已经将它转换为一个不再是“LINQ-ified”的数组。
答案 1 :(得分:2)
一旦调用ToArray
,它返回的阵列上的任何操作都不会返回到服务器。 (除非你使用外键)
在数组上调用的Count()
等LINQ方法将使用常规的LINQ to Objects,并且完全不知道SQL Server。
答案 2 :(得分:1)
除了其他评论(它肯定不会往返;它只是一个数组),你可以使用favArray.Length。