Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心词汇比较_C#_Linq_Entity Framework Core - Fatal编程技术网

C# 实体框架核心词汇比较

C# 实体框架核心词汇比较,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,在SQL中,这样做很容易: SELECT * FROM ATable WHERE (Column1, Column2) < (10, 23) 从ATable中选择* 其中(第1、2栏)t.Column1

在SQL中,这样做很容易:

SELECT * FROM ATable
    WHERE (Column1, Column2) < (10, 23)
从ATable中选择*
其中(第1、2栏)<(10、23)
我可以用实体框架核心做类似的事情吗?它将使用适当的SQL查询还是在内存中过滤,这对于任何较大的表都是不可用的

我想到的唯一一件事就是显式地编写比较代码,即使只有两列,这也很难看

编辑:优化不好的版本,不要使用

context.ATable.Where(t => t.Column1 < 10 || t.Column1 == 10 && t.Column2 < 23);
context.ATable.Where(t=>t.Column1<10 | | t.Column1==10&&t.Column2<23);
之后,这个行值比较特性在SQL标准中,但大多数RDBMS从未正确实现它们。所以我不希望它很快在LINQ中实现,尤其是在EF核心中

变通办法并不漂亮。下面是一些逻辑上等价的LINQ示例

// *Do not use.*
// Simplest logic, but the database engines have issues in realising that
// there is actually an implied "t.Column1 <= 10".
ATable.Where(t => t.Column1 < 10 ||
                  t.Column1 == 10 && t.Column2 < 23);

// Markus Winand's style. Confusing, IMO.
ATable.Where(t => t.Column1 <= 10 &&
                  !(t.Column1 == 10 && t.Column2 >= 23));

// My personal favourite.
ATable.Where(t => t.Column1 <= 10 &&
                  (t.Column1 < 10 || t.Column2 < 23));
//*请勿使用*
//最简单的逻辑,但数据库引擎在实现这一点时存在问题

//实际上有一个隐含的“t.Column1”,其中(Column1,Column2)<(10,23)“是Sql server吗?@Storm斗篷,特别是SQLite。但它在其他数据库引擎中不是很常见吗?这就是我没有具体说明的原因。我敢肯定至少PostgreSQL支持它。我敢肯定sql server不支持它。@StormClope有趣。我认为这是一个非常有用的分页功能,所以我必须说我很惊讶。实际上,我从来没有遇到过SQL server,所以我不知道。那么,我认为这在EFC团队的优先事项列表中并不重要。