相关疑难解决方法(0)

返回IEnumerable <T>与IQueryable <T>

返回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)

两者都会延迟执行,何时应该优先于另一个?

c# linq ienumerable iqueryable linq-to-sql

1051
推荐指数
13
解决办法
22万
查看次数

将IQueryable与Linq一起使用

什么是使用IQueryable在LINQ的背景下?

它是用于开发扩展方法还是任何其他目的?

c# linq iqueryable

245
推荐指数
3
解决办法
25万
查看次数

IQueryable和IEnumerable之间有什么区别

我对这种差异感到困惑.作为.Net的新手,我知道我可以IEnumerables使用Linq扩展进行查询.那么这是什么IQueryable以及它有何不同?


另请参见IQueryable [T]和IEnumerable [T]之间的区别是什么?与这个问题重叠.

linq ienumerable .net-3.0 iqueryable

148
推荐指数
5
解决办法
8万
查看次数

IQueryable,ICollection,IList和IDictionary接口之间的区别

我试图了解IQueryable,ICollection,IList和IDictionary接口之间的区别,这对于迭代,索引,查询等基本操作来说更快.

像Collection,List,Dictionary等类这样的类可以很好地启动这些接口,什么时候应该使用这些类.使用这些类比其他类的基本优势.

我尝试阅读其他类似问题的帖子,但没有回答我的完整问题.谢谢您的帮助.

.net c# collections performance list

49
推荐指数
2
解决办法
3万
查看次数

在.Net 4.0中可以使用实现IQueryable <T>的实例化类型?

在.Net 4.0上的C#的上下文中,是否有任何内置对象可以实现IQueryable<T>

linq types interface iqueryable c#-4.0

40
推荐指数
1
解决办法
2万
查看次数

模糊调用IQueryable或IEnumerable

我实例化一个上下文,并希望编写一个简单的查询

var result = db.Set.Where(x => x.Id == num).Select(whatever);
Run Code Online (Sandbox Code Playgroud)

而且我无法摆脱"Where"抱怨System.Collections.Generic.IEnumerable和System.Linq.IQueryable之间模糊调用的红色波浪形.System.Linq是专门引用的,System.Collections.Generic不会在项目中的任何位置引用.如何告诉代码我想使用System.Linq.IQueryable?

帕梅拉

linq entity-framework

28
推荐指数
2
解决办法
9385
查看次数

实体框架查询性能与原始SQL执行的extrem不同

我有一个关于Entity Framework查询执行性能的问题.

架构:

我有这样的表结构:

CREATE TABLE [dbo].[DataLogger]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [ProjectID] [bigint] NULL,
    CONSTRAINT [PrimaryKey1] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

CREATE TABLE [dbo].[DCDistributionBox]
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DataLoggerID] [bigint] NOT NULL,
    CONSTRAINT [PrimaryKey2] PRIMARY KEY CLUSTERED ( [ID] ASC )
)

ALTER TABLE [dbo].[DCDistributionBox]
    ADD CONSTRAINT [FK_DCDistributionBox_DataLogger] 
    FOREIGN KEY([DataLoggerID]) REFERENCES [dbo].[DataLogger] ([ID])

CREATE TABLE [dbo].[DCString] 
(
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [DCDistributionBoxID] [bigint] NOT NULL,
    [CurrentMPP] [decimal](18, 2) NULL,
    CONSTRAINT [PrimaryKey3] …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework sql-server-2008 entity-framework-6

22
推荐指数
1
解决办法
9358
查看次数

IEnumerable <T>和IQueryable <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)

问题:

1)可以这么说:在第一个查询中,SQLServer正在运行整个操作,包括where子句,返回相关的行 - 而第二个查询SELECT *...并将所有 行返回 到C#和THEN过滤器?

2)如果我只有一个集合 - 在记忆中怎么样?(var lstMyPerson = new List<MyPerson>())

IQueryable<MyPerson> lst = from c in lstMyPerson 
where c.City == "<City>"
select c;
Run Code Online (Sandbox Code Playgroud)

VS

IEnumerable<MyPerson> custs = from c in lstMyPerson 
where c.City == "<City>"
select c; …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerable iqueryable

16
推荐指数
1
解决办法
2724
查看次数

实现IQueryable包装器来转换结果对象

更新2013-08-22:

看了"建立一个IQueryable提供者系列"(感谢链接!)后,我进一步了解了一下.我相应地更新了代码.它仍然没有完全工作.如果我正确理解了教程,GetEnumerator则在请求多个元素的情况下调用(例如,通过ToList()调用queryable或任何聚合函数).所以GetEnumerator包装器的所有实现都要Execute在提供者上调用一个并传递可查询的表达式.在另一种情况下,如果只请求一个元素,Execute则直接调用.queryable的表达式还反映了它是单个元素还是多个元素.它是否正确?

不幸的是,现在我在调用源查询提供程序时得到一个InvalidOperationException,说"Sequence包含多个元素"Execute.这是什么意思?我只是传递表达式而没有任何翻译,因为如上所述涉及相同的类型.IEnumerable代码中的翻译位可能不完整,但是现在我甚至没有达到这一点.


我正在尝试使用单个底层IQueryable作为数据源来实现一个简单的IQueryable包装器,该数据源为每个结果对象调用转换函数.

我认为这将是相对微不足道的,因为包装器唯一要做的就是翻译.但是我无法让我的实现工作.

请看下面我到目前为止所得到的内容.对于某些查询,它正在工作,但我在某些时候收到StackOverflowException InvalidOperationException.我想这是因为我的queryable和我的查询提供程序之间的循环关联.但我不明白如何正确实现这一点.

在这里我的问题和想法:

1.为什么IQueryable有一个Provider又可以再次返回IQueryable?这不是要求无休止的递归吗?

2.为什么不能实现IEnumerator?为什么FirstOrDefault不使用枚举器来获取元素?当我调试应用程序时GetEnumerator()没有被我的可查询器上的FirstOrDefault()调用.

3.由于在每种情况下都没有使用枚举器,因此调用翻译函数的正确位置在哪里?QueryProvider的Execute-methods似乎是正确的地方.但在某些情况下,我仍然需要在枚举器中进行翻译调用吗? 更新:我知道我意识到我需要提供自己的IEnumerable实现,TranslatingEnumerator并从我的Execute方法返回这个枚举.为了获得枚举器GetEnumerator调用Execute(见下文).请求枚举器的LINQ代码似乎确保表达式实际返回一个IEnumerable.

关于代码的一些附注:

  • 翻译源类型名为TDatabaseEntity,翻译目标类型名为TBusinessEntity.

  • 我基本上提供了一个IQueryable,它从基础IQueryable中获取结果对象,并将它们转换为TBusinessEntity 类型 对象.

  • 我知道表达式也需要翻译.但是我将它放在一边,因为在我的实际应用程序中,我使用相同类型的TBusinessEntity和TDatabaseEntity,因此Expression可以直接传递.

  • 尽管属性相同,但结果对象仍然需要转换为其他实例.更新:我的翻译层已经在我的应用程序中工作,并且还负责相关实体.它只是'实现一个IQueryable包装'的东西,我坚持.

  • 我担心整个实现都是错误的 - 代码中的TODO只是我自己的注释.

背景:我在我的数据访问层中实现了自己从DbContext接收的实体的分离,以防止我的业务层与实际实体联系 - 由于EF和其他要求的一些错误,我不能直接使用EF分离实体.

谢谢你的帮助!

IQueryable实现

internal class TranslatingQueryable<TDatabaseEntity, TBusinessEntity> : IQueryable<TBusinessEntity>
{
    private readonly IQueryProvider _provider;
    private readonly IQueryable<TDatabaseEntity> _source; …
Run Code Online (Sandbox Code Playgroud)

.net c# linq entity-framework iqueryable

16
推荐指数
1
解决办法
8631
查看次数

ToArrayAsync()抛出"源IQueryable未实现IAsyncEnumerable"

我在ASP.NET Core上有一个MVC项目,我的问题与IQueryable和异步相关.我写了以下搜索方法IQueryable<T>:

private IQueryable<InternalOrderInfo> WhereSearchTokens(IQueryable<InternalOrderInfo> query, SearchToken[] searchTokens)
{
    if (searchTokens.Length == 0)
    {
        return query;
    }
    var results = new List<InternalOrderInfo>();
    foreach (var searchToken in searchTokens)
    {
        //search logic, intermediate results are being added to `results` using `AddRange()`
    }

    return results.Count != 0 ? results.Distinct().AsQueryable() : query;
}
Run Code Online (Sandbox Code Playgroud)

我在方法中称之为ExecuteAsync():

public async Task<GetAllInternalOrderInfoResponse> ExecuteAsync(GetAllInternalOrderInfoRequest request)
{
    //rest of the code
    if (searchTokens != null && searchTokens.Any())
    {
        allInternalOrderInfo = WhereSearchTokens(allInternalOrderInfo, searchTokens);
    }
    var orders = await …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous entity-framework asp.net-core-mvc asp.net-core

8
推荐指数
6
解决办法
5766
查看次数