有人可以帮我理解ReSharper要改变的建议:
var progs = ctx.Programs.Where(i => progIds.Contains(i.ID) && i.Projects.Any())
到此:
var progs = Queryable.Where
(ctx.Programs, i => progIds.Contains(i.ID) && Enumerable.Any<Project>(i.Projects))
(想法是返回与id列表匹配的程序,progIds
,并包含项目,导航属性)
或者这个:
GridView gv = new GridView();
gv.DataSource = ctx.Programs.Where(i => progIds.Contains(i.ID)).ToList();
到此:
GridView gv = new GridView();
gv.DataSource = Queryable.Where(ctx.Programs, i => progIds.Contains(i.ID)).ToList();
我特别想知道这样做的好处。我正在尝试尽可能减少内存分配
答案 0 :(得分:1)
Queryable.Where
是一种扩展方法。它被定义为
public static IQueryable<TSource> Where<TSource>
(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
您可以将其称为常规静态方法,将IQueryable作为参数传递,或作为扩展方法传递。编译器将生成完全相同的代码。
扩展方法语法比静态方法语法更具可读性。
答案 1 :(得分:1)
案件之间没有区别。这实际上是封面下的扩展方法所发生的情况。这是个人偏好的问题,虽然直接调用不太常用。