Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# NET和IQueryable_C#_Sql_Lambda_.net Core_.net Core 2.0 - Fatal编程技术网

C# NET和IQueryable

C# NET和IQueryable,c#,sql,lambda,.net-core,.net-core-2.0,C#,Sql,Lambda,.net Core,.net Core 2.0,问题是关于.NETCore2的。 我没有使用任何ORM,因为我的应用程序不是一个简单的CRUD,所以我自己编写SQL查询(我只使用EntityFramework进行用户标识) 但现在我有一个问题。事实证明,我的服务中应该有几个返回数据集的几乎相同的方法。它们基本相同,但SQL“WHERE”子句不同。因此,我考虑使用一个带有lambda表达式的方法,这样我就可以编写如下内容: service.GetRecords<Person>(p => p.FirstName == "Jack

问题是关于.NETCore2的。 我没有使用任何ORM,因为我的应用程序不是一个简单的CRUD,所以我自己编写SQL查询(我只使用EntityFramework进行用户标识)

但现在我有一个问题。事实证明,我的服务中应该有几个返回数据集的几乎相同的方法。它们基本相同,但SQL“WHERE”子句不同。因此,我考虑使用一个带有lambda表达式的方法,这样我就可以编写如下内容:

service.GetRecords<Person>(p => p.FirstName == "Jack" && p.City == "NY");
我试着自己写一些东西(使用System.Linq.Expressions),但这确实很耗时。那么,有没有更好的方法或现成的工具呢


另一件适合我的事情(甚至更好)是,如果有一种方法可以将
IDataReader
IQueryable

结合起来,这就是ORM所做的。它根据属性名标识列名、转换为表名的类名和转换为SQL语句的lambda表达式,并最终使用简单的ADO.NET类执行这些SQL语句。这些都在很大程度上使用了反射。基本上,您正在尝试拥有自己的ORM。反思是你的方式。听起来你在重新创造。一旦你发现你的简单ORM不再简单,这通常是一个你应该停止的标志,因为你提出的任何东西都不会像现有的ORM那样方便、快速或经过测试。(在案例中:考虑如何翻译<代码> null <代码> >值(以及任何与“代码>空NU/CODE >比较”、<代码> DATETIME/<代码>、<代码>浮点、<代码>双和“<代码>之类的东西。包含。这是以前做过的许多工作。”您所问的可能的副本是ORM的定义,或者更确切地说,ORM的查询语言。如果要映射到报表查询,可以轻松映射到视图而不是表。如果确实要映射,则可以在某个地方实现(或借用)一个
IQueryable
实现,该实现将生成SQL
WHERE
子句。我会严肃地质疑,与仅仅将子句作为字符串传递相比,这是否值得付出努力(或者,如果这对您的口味来说有点太容易出错,那么,一个
WhereBuilder
,这样您就可以拥有一个流畅的界面a la
。其中(“FirstName=@FirstName”)。和(“City=@City”)。使用(new{FirstName=“Jack”,City=“NY”)
。拖动
IQueryable
看起来确实需要付出很多努力,但收获相对较少。
"FirstName = 'Jack' and City = 'NY'"