我非常感谢详细解释(以及如果)以下Linq与实体相关的代码片段在幕后发生的情况有所不同:
答:“foreach”循环在“使用”子句中
B.而不是Linq to Entites我使用了一个在Linq上运行查询到sql的silimilar映射
C. A + B。
代码:
ILookup<string, tblProduct> productBooks;
using (TbsDBEntities tbsDbEntities = new TbsDBEntities())
{
productBooks = (from tbsDbEntity in tbsDbEntities.tblProducts
orderby tbsDbEntity.Title
select tbsDbEntity).ToLookup(p => p.Title.Substring(0, 1).ToUpper());
}
foreach (IGrouping<string, tblProduct> productBook in productBooks)
{
if (productBook.Key[0] >= 'A' && productBook.Key[0] <= 'Z')
{
HtmlAnchor anchor = new HtmlAnchor();
anchor.InnerText = productBook.Key+" ";
anchor.HRef ="/"+ productBook.Key;
divHeader.Controls.Add(anchor);
}
答案 0 :(得分:0)
幕后: 代码通过实体映射访问产品的数据库列表。通常会将ADO.NET Entity framework + Linq的代码写入实体。
代码使用linq提取数据行而不是使用典型的SQL查询,例如“select * from products”..实体映射有望在幕后生成查询并获取数据..如果你有像sql profiler那样的话工具,您将能够看到代码传递给sql server的查询。
foreach通常为linq语句返回的每个产品创建链接...并在其中添加链接..一个if语句可能保护代码免受不以字母字符开头的产品名称的影响。所以可能检查&gt; = A和&lt; = Z
一个。不应该有区别。
B中。如果tblProducts有大量数据,你可能会有一个体贴的性能提升..因为linq-to-database有助于避免构建所有数据的实体对象。
℃。与B相同...因为我认为在'使用'中使用for循环不会使它有任何不同
答案 1 :(得分:0)
我仔细研究了这一点,并在using
关闭后认为“那将无效”。
然而,ToLookup()
实际上执行了SQL语句,所以这一切都很好。将它留作IEnumerable将导致它在你的第二个foreach中失败,因为上下文将被处理掉。使用此代码可以使用Linq to SQL。