返回IQueryable<T>
与IEnumerable<T>
?有什么区别?
IQueryable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
IEnumerable<Customer> custs = from c in db.Customers
where c.City == "<City>"
select c;
Run Code Online (Sandbox Code Playgroud)
两者都会延迟执行,何时应该优先于另一个?
什么是使用IQueryable
在LINQ的背景下?
它是用于开发扩展方法还是任何其他目的?
我对这种差异感到困惑.作为.Net的新手,我知道我可以IEnumerables
使用Linq扩展进行查询.那么这是什么IQueryable
以及它有何不同?
另请参见IQueryable [T]和IEnumerable [T]之间的区别是什么?与这个问题重叠.
当一个方法返回IEnumerable<T>
并且我没有任何东西可以返回时,我们可以使用Enumerable.Empty<T>()
.
对于返回的方法,是否有与上述相同的内容 IQueryable<T>
是的目的AsQueryable()
只是让你可以围绕传递IEnumerable
到所期望的方法IQueryable
,或者是有一个有用的理由表示IEnumerable
为IQueryable
?例如,它应该是这样的情况:
IEnumerable<Order> orders = orderRepo.GetAll();
// I don't want to create another method that works on IEnumerable,
// so I convert it here.
CountOrders(orders.AsQueryable());
public static int CountOrders(IQueryable<Order> ordersQuery)
{
return ordersQuery.Count();
}
Run Code Online (Sandbox Code Playgroud)
或者它实际上是否使它做了不同的事情:
IEnumerable<Order> orders = orderRepo.GetAll();
IQueryable<Order> ordersQuery = orders.AsQueryable();
IEnumerable<Order> filteredOrders = orders.Where(o => o.CustomerId == 3);
IQueryable<Order> filteredOrdersQuery = ordersQuery.Where(o => o.CustomerId == 3);
// Are these executed in a different way?
int result1 = filteredOrders.Count(); …
Run Code Online (Sandbox Code Playgroud) 使用C#LINQ语法编写查询时,有没有办法使用关键字语法中的Queryable.SelectMany方法?
对于
string[] text = { "Albert was here",
"Burke slept late",
"Connor is happy" };
Run Code Online (Sandbox Code Playgroud)
使用流畅的方法,我可以查询
var tokens = text.SelectMany(s => s.Split(' '));
Run Code Online (Sandbox Code Playgroud)
是否有类似的查询语法
var tokens = from x in text selectmany s.Split(' ')
Run Code Online (Sandbox Code Playgroud) 我有一个存储库类,它包装了我的LINQ to SQL数据上下文.存储库类是一个业务线类,包含所有数据层逻辑(以及缓存等).
这是我的repo界面的v1.
public interface ILocationRepository
{
IList<Location> FindAll();
IList<Location> FindForState(State state);
IList<Location> FindForPostCode(string postCode);
}
Run Code Online (Sandbox Code Playgroud)
但是为了处理FindAll的分页,我正在讨论是否要公开IQueryable <ILocation>而不是IList来简化分页等环境的接口.
从数据仓库中暴露IQueryable的利弊是什么?
很感谢任何形式的帮助.
我有一个List,我想将它包装成IQueryable.
这可能吗?
我想知道IQueryable,List,IEnumerator和我何时应该使用每个的区别?
例如,当使用Linq to SQL时,我会做这样的事情:
public List<User> GetUsers()
{
return db.User.where(/* some query here */).ToList();
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道我是否应该使用IQueryable.我不确定在列表中使用它的好处.
iqueryable ×10
c# ×7
linq ×7
ienumerable ×5
.net ×3
linq-to-sql ×2
.net-3.0 ×1
.net-3.5 ×1
keyword ×1
list ×1
return ×1