QueryableProvider<T>的Where问题及解决建议 返回
C#论坛
老数据
5
2976
悬赏:0 飞吻
大佬,发现一个关于Where的问题。
如下代码所示:
//初始定义一个query变量
var query = db.Queryable<LiveRoom>().Where(r => r.Status == 0);
//查询ForbidFlag==0的实体
LiveRoom room = query.Where(r => r.ForbidFlag == 0).First();
//执行后的sql代码为(截取where部分的代码):WHERE ( [Status] = @Status0 ) AND ( [ForbidFlag] = @ForbidFlag1 )) T WHERE RowIndex BETWEEN 1 AND 1
[{"key":"@Status0","value":"0"},{"key":"@ForbidFlag1","value":"0"}]
//查询ForbidFlag==1的数量
int forbidenRoomCount = query.Where(r => r.ForbidFlag == 1).Count();
//执行后的sql代码为(截取where部分的代码):WHERE ( [Status] = @Status0 ) AND ( [ForbidFlag] = @ForbidFlag1 ) AND ( [ForbidFlag] = @ForbidFlag2 )) CountTable
[{"key":"@Status0","value":"0"},{"key":"@ForbidFlag1","value":"0"},{"key":"@ForbidFlag2","value":"1"}]
Where方法会将前面执行的Where条件累加起来,而query已经不是原始的query了,这是一个问题.
解决的建议:可以在增加条件的时候,通过深拷贝一个临时变量出来,不用直接返回当前的this。您看可以吗?
热忱回答(5)
-
fate stay night VIP0
2017/9/84.5.1.6 版本周六会有更新
LiveRoom room = query.First(r => r.ForbidFlag == 0).;更新后的新版本后这样写就没有问题
0 回复 -
fate stay night VIP0
2017/9/8只要是queryable直接操作数据库就不需执行拼接,不要用WHERE
0 回复 -
青云飘零 VIP0
2017/9/8@fate stay night:有的时候会先创建一个查询,然后后面会再次根据这个查询去进行筛选排序等操作
0 回复 -
fate stay night VIP0
2017/9/8@青云飘零:等我更新后把 .where().single() 改成 .single(it=>it.id) 这种我现在还没更新
0 回复 -
fate stay night VIP0
2017/9/11已经更新了
0 回复