小编are*_*-ru的帖子

在不停止序列的情况下处理Reactive Extensions中的异常

为什么RX有以下语法OnNext* (OnError|OnCompleted)?而不是(OnNext|OnError)* OnCompleted?这是从实现的角度来看很清楚(这也与通用语义IEnumerableyield),但我想从现实生活中的情况不同.在现实生活中 - 生产者生成混合的数据流和异常(异常不会破坏生产者).

问题:如果我理解正确,唯一可行的解​​决方案是使可观察的返回复杂数据结构从初始数据和生成的异常(Observable.Timestamp().TimeInterval()具有类似的概念)结合起来,还是有其他选择?


目前我得出了以下解决方案:在可观察的生产者内部我手动处理exeptions并将它们传递给以下数据结构,这是我可观察的结果

public class ValueOrException<T>
{
    private readonly Exception ex;
    private readonly T value;

    public ValueOrException(T value, Exception ex)
    {
        this.value = value;
        this.ex = ex;
    }

    public ValueOrException(T value)
    {
        this.value = value;
    }

    public T Value
    {
        get { return this.value; }
    }

    public Exception Ex
    {
        get { return this.ex; }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# exception-handling system.reactive

10
推荐指数
1
解决办法
3150
查看次数

来自存储过程的IQueryable <>(实体框架)

我想IQueryable<>在执行存储过程时获得结果.

这是代码的和平工作正常:

IQueryable<SomeEntitiy> someEntities;  
var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiy
    where
      se.GlobalFilter == 1234 
  select se;
Run Code Online (Sandbox Code Playgroud)

我可以使用它来应用全局过滤器,然后以这种方式使用结果

result = globbalyFilteredSomeEntities
  .OrderByDescending(se => se.CreationDate)
  .Skip(500)
  .Take(10);
Run Code Online (Sandbox Code Playgroud)

我想做什么 - 在全局过滤器中使用一些存储过程.
我试过了:

添加存储过程m_Entities,但它会IEnumerable<>立即返回并执行sp:

var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiyStoredProcedure(1234);
Run Code Online (Sandbox Code Playgroud)

使用EFExtensions库实现查询,但确实如此IEnumerable<>.
如果我使用AsQueryable()OrderBy(),Skip(),Take()
,之后ToList()执行该查询-
我得到异常DataReader是开放的,我需要先关闭它(不能粘贴错误-这是俄语).

var globbalyFilteredSomeEntities = 
  m_Entities.CreateStoreCommand("exec SomeEntitiyStoredProcedure(1234)")
            .Materialize<SomeEntitiy>();
            //.AsQueryable()
            //.OrderByDescending(se => se.CreationDate)
            //.Skip(500)
            //.Take(10)
            //.ToList();   
Run Code Online (Sandbox Code Playgroud)

也只是跳过.AsQueryable()没有帮助 - 同样的例外.
当我 …

.net linq-to-entities stored-procedures entity-framework iqueryable

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

SQL Server 2008 R2和索引视图中的执行计划

我创建了一个由三列组成的索引视图(MyView):

Table1_ID (int not null)
Object_CreationDate (datetime, null)
Objec_Count(bigint null)
Run Code Online (Sandbox Code Playgroud)

我在两列上创建了集群唯一索引 IX_1:Table1_IDObject_CreationDate

我想运行两个查询:
1.

Select * from [dbo].MyView
where Table1_ID = 10
Run Code Online (Sandbox Code Playgroud)

2.

 Select * from [dbo].MyView
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()
Run Code Online (Sandbox Code Playgroud)

1-st查询运行速度很快(即使使用DBCC DROPCLEANBUFFERS())并使用简单的执行计划,通过使用MyView和IX_1
2-nd查询运行不是那么快,因为它使用"旧"执行计划(由三个表中的几个索引寻找并嵌套循环)

我误解了这种情况.至于我,自然使用IX_1和MyView进行第二次查询.
此外,我等待第二个查询以相同的速度运行,甚至比第一个更快,因为它在聚集索引中的where子句中使用两列.

我尝试运行第二次查询with(index=IX_1)并更新列的统计信息,但仍然具有相同的执行计划.

是否有可能强制sql使用MyViewIX_1

sql-server indexed view sql-server-2008-r2

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