iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >LINQ To SQL和ORM怎么理解
  • 714
分享到

LINQ To SQL和ORM怎么理解

2023-06-17 22:06:38 714人浏览 安东尼
摘要

这篇文章主要讲解了“LINQ To sql和ORM怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ To SQL和ORM怎么理解”吧!LINQ To SQL和ORM的理解1、没

这篇文章主要讲解了“LINQ To sqlORM怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ To SQL和ORM怎么理解”吧!

LINQ To SQL和ORM的理解1、

没有LINQ的源代码,不知道清楚中间的数据是如何处理的,特别是缓存是如何处理的。

LINQ To SQL和ORM的理解2、

用LINQ翻译到存储过程/Sql语句效率很低的,对于复杂的对效率有一定的要求的,还是要写存储过程。而且翻译出来的存储过程/Sql语句的怎么缓存,第二次执行的时候还要重新翻译,不能很好的利用缓存。

LINQ To SQL和ORM的理解3、工具的支持。

这一点是非常重要。如果没有有力工具的支持,用ORM简直就是恶梦。LINQ的工具支持总的来说,现在在VS2008里的支持我感觉还不是很友好。至少有一点,我们通常在表的备注里面写下这个字段的注释,很多情况下对应到界面上就是这个字段的抬头,这个工具不能直接生成到项目里去,因为我们不能控制,再者,现在的项目都不是由一个人完成,如果一个类有几十个字段,很难记住解释,自己的工具可以加入注释,方便开发

LINQ To SQL和ORM的理解4、与业务层的综合。

通常ORM映射就是把对象与关系表之间形成映射关系,映射的目标是为了方便业务层的逻辑处理,如果不能与业务层无缝的结合起来,那么对于项目的开发,也未必有多少好处。至少在的ORM里面,与的我业务层可以非常友好的集成在一起。

LINQ To SQL和ORM的理解5、多数据源的支持。

对于我来说,这点也是非常关键的。我说的多数据源是指一个项目里面,有多个数据库,比如:基础数据、客户管理、业务运作、权限管理等,这些都是相对独立的模块,开发的时候,可以把这几个作为单独的项目开发,各自有自己独立的数据库,而且在多个项目里面,这些模块都是非常相似,像权限模块基本上是通用的,没有必要再重复开发。如果能够做到数据库层分离,则新项目开发的时候,可以达到更快的速度。当然也可以做到很容易的分合,把两个数据库合并成一个,或者把一个数据库分开成两个,只涉及到配置文件的更改,在开发的时候可以不关心的。

LINQ To SQL和ORM的理解6、对于可变查询的处理。

也就是相当于拼接字符串了。可能会说,这个是LINQ的强项,但是,如果对于一个分布式的项目呢?又应该如何处理。知道ORM的朋友应该都知道IBatis.net 和NHibnate ,I家的参数处理是非常的方便的,N家呢就没有I的直观,但是对于面向对象的处理I比N家好像就有太多的不足了。对于远程处理要能够通过参数传递这些只对映射层公开的参数,这点对于程序的某些地方可能是至关重要的影响。我的ORM里面,随便起了一个名字,叫通用查询,业务逻辑里用的查询通常会写在存储过程里,可以通过工具直接生成业务层代码里的函数。

LINQ To SQL和ORM的理解7、对于泛形、继承的支持与处理。

泛形,可以减少很多代码,同时,还可以减少很多人为的错误。

因为人的精力总是有限的,你把精力花在一个地方,那么其他方面肯定关注的少了,我也一样。可能是我把精力过多的放在我的ORM里面,忽略了其他的方面,请大家能够给出批评指正。接下来,把我的ORM映射部分做一详细的介绍

LINQ To SQL和ORM的理解之ORM映射主要分为以下几个方面:

LINQ To SQL和ORM的理解1、对象、参数翻译

a)LINQ To SQL和ORM的理解之对象的表达。对象的映射,我采用的是自定义属性方法。

namespace LG.Common.Enities  {  using System;  using System.Collections.Generic;  using System.Text;  using System.Data;  using System.Data.SqlClient;  using Unie2e.Common;  using Unie2e.ORM;  using Unie2e.ORM.Mapping;  [System.SerializableAttribute()]  [Unie2e.ORM.Mapping.TableAttribute(  "City", MapFileName="CityCustParam.Xml")]  public sealed class CityEntity :   Unie2e.ORM.Mapping.Entity  {  /// <summary>  /// 映射字段的总长度  /// </summary>  private const int length = 5;

LINQ To SQL和ORM的理解之映射字段

#region 映射字段   /// <summary>   /// 城市Id   /// </summary>   [Unie2e.ORM.Mapping.FieldAttribute(  "City", "CityId", true, SqlDbType.  UniqueIdentifier, 0, 0, 0, "城市Id")]   public Guid CityId = System.Guid.NewGuid();   /// <summary>   /// 省份Id   /// </summary>   [Unie2e.ORM.Mapping.FieldAttribute("City",   "ProvinceId", false, SqlDbType.UniqueIdentifier,   0, 0, 0, "省份Id")]   public Guid ProvinceId = System.Guid.Empty;   /// <summary>   /// 城市代码   /// </summary>   [Unie2e.ORM.Mapping.FieldAttribute("City",  "CityCode", false, SqlDbType.VarChar,   50, 0, 0, "城市代码")]   public String CityCode;   /// <summary>   /// 城市名称   /// </summary>   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityName", false, SqlDbType.VarChar,   50, 0, 0, "城市名称")]   public String CityName;   /// <summary>   /// 备注   /// </summary>   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityComment", false, SqlDbType.VarChar,   200, 0, 0, "备注")]   public String CityComment;   #endregion

LINQ To SQL和ORM的理解之重载基类函数

public override void Initialize(object[] parameters)   {   if ((length != parameters.Length))  {  throw new E2EException("参数个数与字段数不相等");  }  CityId = ((System.Guid)(parameters[0]));  ProvinceId = ((System.Guid)(parameters[1]));  CityCode = ((string)(parameters[2]));  CityName = ((string)(parameters[3]));  CityComment = ((string)(parameters[4]));  }  public override object[] ToArray()  {  object[] objs = new object[5];  objs[0] = CityId;  objs[1] = ProvinceId;  objs[2] = CityCode;  objs[3] = CityName;  objs[4] = CityComment;  return objs;  }  #endregion  }  [System.SerializableAttribute()]  [Unie2e.ORM.Mapping.TableAttribute("City")]  public abstract class CityFindParam<T> : EntityParam<T> where T: IEntity  {  /// <summary>   /// 映射字段的总长度  /// </summary>  private const int length = 6;

LINQ To SQL和ORM的理解之映射字段

[Unie2e.ORM.Mapping.FieldAttribute(  "City", "Method", SqlDbType.VarChar, 50, 0, 0, "")]   public String Method;   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]   public Guid CityId = System.Guid.Empty;   [Unie2e.ORM.Mapping.FieldAttribute("City",   "ProvinceId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]   public Guid ProvinceId = System.Guid.Empty;   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityCode", SqlDbType.VarChar, 50, 0, 0, "")]   public String CityCode;   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityName", SqlDbType.VarChar, 50, 0, 0, "")]   public String CityName;   [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityComment", SqlDbType.VarChar, 200, 0, 0, "")]   public String CityComment;   #endregion

LINQ To SQL和ORM的理解之重载基类函数

public override object[] ToArray()  {  object[] objs = new object[6];  objs[0] = Method;  objs[1] = CityId;  objs[2] = ProvinceId;  objs[3] = CityCode;  objs[4] = CityName;  objs[5] = CityComment;  return objs;  }  public override void Initialize(object[] parameters)  {  if ((length != parameters.Length))  {  throw new E2EException("参数个数与字段数不相等");  }  Method = ((String)(parameters[0]));  CityId = ((Guid)(parameters[1]));  ProvinceId = ((Guid)(parameters[2]));  CityCode = ((String)(parameters[3]));  CityName = ((String)(parameters[4]));  CityComment = ((String)(parameters[5]));  }  #endregion  }  [System.SerializableAttribute()]  [Unie2e.ORM.Mapping.TableAttribute("City")]  public sealed class CityFindParam : CityFindParam<CityEntity>  {  }  [System.SerializableAttribute()]  [Unie2e.ORM.Mapping.TableAttribute("City")]  public abstract class CityActionParam<T> :   EntityParam<T> where T: IEntity   {   /// <summary>  /// 映射字段的总长度  /// </summary>  private const int length = 2;  映射字段#region 映射字段  [Unie2e.ORM.Mapping.FieldAttribute("City",   "Method", SqlDbType.VarChar, 50, 0, 0, "")]  public String Method;  [Unie2e.ORM.Mapping.FieldAttribute("City",   "CityId", SqlDbType.UniqueIdentifier, 0, 0, 0, "")]  public Guid CityId = System.Guid.Empty;  #endregion

LINQ To SQL和ORM的理解之重载基类函数

public override object[] ToArray()  {  object[] objs = new object[2];  objs[0] = Method;  objs[1] = CityId;  return objs;  }  public override void Initialize(object[] parameters)  {  if ((length != parameters.Length))  {  throw new E2EException("参数个数与字段数不相等");  }  Method = ((String)(parameters[0]));  CityId = ((Guid)(parameters[1]));  }  #endregion  }   [System.SerializableAttribute()]  [Unie2e.ORM.Mapping.TableAttribute("City")]  public sealed class CityActionParam :   CityActionParam<CityEntity>  {  }  }   [Unie2e.ORM.Mapping.TableAttribute("City",   MapFileName="CityCustParam.Xml")]

给出了映射对象与数据库表或者视图的关系,MapFileName给出了所对应的通用查询的配置文件,当然也可以把Sql语句写在配置文件里面,实现查询之外的其他动作处理。因为工具没有对其他生成代码函数的支持,所以通常还是通过工具来生成存储过程来处理。

在Entity里面,有两上重载的函数:public override void Initialize(object[] parameters)和public override object[] ToArray(),这两个函数是为了加速数据加载的。底层用的是DataReader读取数据,尽可能少的通过反射加载数据,实现数据的快速从数据库加载到对象里面,因为这些代码都是通过工具生成的,不会出现错误,比较要注意的是用工具写存储过程的时候要注意一点就可以了。

[Unie2e.ORM.Mapping.FieldAttribute("City", "CityId",    true, SqlDbType.UniqueIdentifier, 0, 0, 0, "城市Id")]

给出了对象Field与表或视图的列的映射关系。***一个是对于注释,对于BO的业务数据会生成Summary。最终会生成到界面的表述,以及列表的配置文件的头。

除了Entity 外,还有CityFindParam<T> ,CityFindParam,CityActionParam<T>,CityActionParam这几个类,CityFindParam<T> 主要是为了实现可变返回数据,默认情况下返回的是完整表的数据,有时候,数据库表或视图的字段很多,比较重要的地方,可能只会要求返回其中的部分字段,用在这方面处理。CityActionParam,主要是针对批量更新等特殊处理,对个别地方进行性能优化处理。

b)LINQ To SQL和ORM的理解之对象翻译

对象翻译就是把对象属性翻译到成相对应的存储过程的调用。我的ORM映射主要是对象参数处理。添加、删除、修改都是对完整的对象的映射,对于特别的处理是通过Action处理的。

SqlParameter[] BuilderSqlParameters(Type type,SQLActionType actionType)  {  FieldInfo[] infos = type.GetFields();  SqlParameter[] parameters =   new SqlParameter[infos.Length];  for (int i = 0; i < infos.Length; i++)  {  object[] objs = infos[i].GetCustomAttributes(typeof(FieldAttribute), false);  FieldAttribute attr = objs[0] as FieldAttribute;  SqlParameter sp;  if (attr.Length != 0)  sp = new SqlParameter("@" + attr.ColumnName, attr.SqlDbType, attr.Length);  else  {   sp = new SqlParameter("@" + attr.ColumnName, attr.SqlDbType);   }   if (attr.IsKey&&actionType== SQLActionType .Insert)   sp.Direction = ParameterDirection.InputOutput;   parameters[i]=sp;  }  }  return parameters;  }

***次执行的时候,遍历所有字段,根据FieldAttribute 生成调用存储过程的Command,并缓存,第二次执行的时候,直接从缓存里取出Command 的Clone()。此处调用Clone ,返回的是Command的DeepCopy!!!也是微软在2.0里面新添加的函数,我估计新加的函数的用处也就是在这里了,极大的提高了处理速度。接下来就是存储过程的赋值了。

void AssignParameterValues(object instance, SqlCommand cmd)  {  SqlParameterCollection sps = cmd.Parameters;  IEntity idb =instance as IEntity;  if (idb == null)  throw new Exception("存储过程赋值出错,要具有IEntity接口");  object[] values = idb.ToArray();  if (values.Length != sps.Count )  throw new Exception("参数个数不一致");  for (int i = 0; i < values.Length; i++)  {  object val = values[i];  //对于时间的空值等,这里还会报错。一般要求要有初始化。  sps[i].Value =null == val ?System.DBNull.Value:val;  }  }

刚刚介绍了在Entity和ParamEntity里面有两个重载的虚函数函数,其中一个是:ToArray(),在这里用到了。如果是通过反射得到实例的值,那效率实在是太低了,这里用了IEntity的ToArray(),因为映射的顺序位置都是固定的,所以可以通过数组的方式实现。这也是工具的重要的地方,靠手工处理,错误的几率太高了。

现在存储过程是可以正常调用了,正常的 增、改、删,是可以处理了,下面介绍取数据。

c)LINQ To SQL和ORM的理解之数据读取加载

数据加载主要是通过DataReader实现的。

object GetFindResult(IDataReader reader, Type targetType)  {  Type target = targetType;  object[] fields = new object[reader.FieldCount];  IEntity t = (IEntity)Activator.CreateInstance(target);  Type constructed = typeof(ORMCollection<>).  MakeGenericType(target);  IList list = (IList)Activator.CreateInstance(constructed);  while (reader.Read())  {  for (int i = 0; i < fields.Length; i++)  {   fields[i] = reader.IsDBNull(i) ? null : reader[i];  }  t.Initialize(fields);  list.Add(t.Clone());  }  return list;  }  object GetFindResult(IDataReader reader,   Type targetType, int currentpage, int pagesize)

数据加载提供了2个函数,一个是带分页一个是不带分页。IEntity提供的几个接口在这里都用了,也主要是为了这里准备的。也主要是在此实现了数据的快速加载。主要体现在两个上面,一个是t.Initialize(fields),Initialize 在上面是介绍了,不用通过反射初始化及赋值,再者是 t.Clone(),用的也是DeepCopy,不是用Activator 创建新的对象实例,因为Activator 构造对象的时候速度跟DeepCopy相比,要慢了很多。

还有一个是我自封的通用查询,也就是通过MapFileName 找到配置文件,把Sql配置文件加载进来,翻译成Command加到缓存里面,后期的处理与上面的一样,在这里就不再过多的介绍了,只把关键代码列出来。

string BuildFind(FieldInfo[] pis, FinderParam finderParam,   out SqlParameter[] parameters)  {  ORMCollection<FinderParamItem> items =   finderParam.ParamItemCollection;  if (items==null)   throw new E2EException("ParamItemCollection参数不能为空");  StringBuilder sb = new StringBuilder();  List<SqlParameter> parameterList = new List<SqlParameter>();  foreach (FinderParamItem var in items)  {  FieldInfo pi = Array.Find(pis, delegate(FieldInfo obj) {   return obj.Name.Equals(var.PropertyName,   StrinGComparison.OrdinalIgnoreCase); });   if (pi == null)    throw new E2EException("不存在参数:"+var.PropertyName);    object[] attribs = pi.GetCustomAttributes(  typeof(FieldAttribute), false);   if (attribs.Length == 0)  continue;  FieldAttribute attr = attribs[0] as FieldAttribute;  string typeName = pi.FieldType.Name;  if (sb.Length != 0)  {  switch (var.JoinKey)  {  case JoinKey.与:   sb.Append(" AND ");   break;   case JoinKey.或:   sb.Append(" OR ");   break;   default:   break;   }  }  sb.Append(" (");   sb.Append(attr.TableName+"."+attr.ColumnName);   switch (var.ComparisonKey)   {   case ComparisonKey.等于:   sb.Append("=");   break;   case ComparisonKey.不等于:   sb.Append("<>");   break;   case ComparisonKey.大于:   sb.Append(">");   break;   case ComparisonKey.小于:   sb.Append("<");   break;   case ComparisonKey.大于等于:   sb.Append(">=");   break;   case ComparisonKey.小于等于:   sb.Append("<=");   break;   case ComparisonKey.包含:   sb.Append(" like ");   break;   case ComparisonKey.不含:   sb.Append("<>");   break;   default:   break;  }   sb.Append("@" + pi.Name + ")");  SqlParameter param = new SqlParameter();  param.ParameterName = "@" + pi.Name;  param.SqlDbType = attr.SqlDbType;  param.Size = attr.Length;  param.Scale = (byte)attr.XScale;  param.Precision = (byte)attr.XPrec;  param.IsNullable = true;  parameterList.Add(param);  sb.Append(" ");  }  if (sb.Length > 0)  sb.Insert(0, " WHERE ");  parameters = parameterList.ToArray();  return sb.ToString();  }

到此,基本ORM 映射的处理已经介绍完了,映射的代码都是通过工具生成的,不用人工去处理,曾考虑直接生成Dll的,包括存储过程,都是工具与之配套的,至少不用写千篇一率的Insert、Update、Delete、FindById这些枯燥的存储过程了,如果是通过外键关联的,相关的存储过程也是自动生成的,尽可能减少人工处理过程。(建立的时候可以把外键全部进来,代码生成完之后,再把外键去掉,偷工减料的做法,偶经常做 ^_^)

当然,这里只是ORM 处理,还没有把业务逻辑层关联起来,大家最关注的还是业务逻辑处理,这才是核心,我只所以不想更换ORM,部分是由于我的逻辑层的组织。

感谢各位的阅读,以上就是“LINQ To SQL和ORM怎么理解”的内容了,经过本文的学习后,相信大家对LINQ To SQL和ORM怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: LINQ To SQL和ORM怎么理解

本文链接: https://www.lsjlt.com/news/293573.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • LINQ To SQL和ORM怎么理解
    这篇文章主要讲解了“LINQ To SQL和ORM怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ To SQL和ORM怎么理解”吧!LINQ To SQL和ORM的理解1、没...
    99+
    2023-06-17
  • LINQ TO SQL加载模式怎么理解
    本篇内容介绍了“LINQ TO SQL加载模式怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在LINQ TO SQL中,有两种主要的...
    99+
    2023-06-17
  • Linq To SQL数据问题怎么解决
    这篇文章主要讲解了“Linq To SQL数据问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linq To SQL数据问题怎么解决”吧! 建一个project 命名为DLinq ...
    99+
    2023-06-17
  • Linq to SQL的DataContext怎么写
    本篇内容介绍了“Linq to SQL的DataContext怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!强类型DataContex...
    99+
    2023-06-17
  • LINQ to SQL查询和SQL命令怎么使用
    这篇文章主要讲解了“LINQ to SQL查询和SQL命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ to SQL查询和SQL命令怎么使用”吧!直接执行LINQ to S...
    99+
    2023-06-17
  • LINQ to SQL数据表怎么用
    这篇文章主要为大家展示了“LINQ to SQL数据表怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“LINQ to SQL数据表怎么用”这篇文章吧。在LINQ to SQL数据表里面都是用...
    99+
    2023-06-17
  • LINQ to SQL映射怎么实现
    本篇内容介绍了“LINQ to SQL映射怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!LINQ to SQL映射函数和存储过程LI...
    99+
    2023-06-17
  • linq to sql多表怎么实现
    这篇文章主要讲解了“linq to sql多表怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linq to sql多表怎么实现”吧!在讲述linq to sql多表之前,先看看生成的...
    99+
    2023-06-17
  • 怎么实现LINQ to SQL删除行
    这期内容当中小编将会给大家带来有关怎么实现LINQ to SQL删除行,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。可以通过将对应的 LINQ to SQL对象从其与表相关的集合中删除来删除数据库中的行。...
    99+
    2023-06-17
  • linq to sql多表查询怎么实现
    这篇文章主要讲解了“linq to sql多表查询怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linq to sql多表查询怎么实现”吧!在手写sql的年代,如果想从sqlserv...
    99+
    2023-06-17
  • 怎么用Linq to SQL访问数据库
    本篇内容介绍了“怎么用Linq to SQL访问数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在向大家详细介绍Linq之前,首先让大家...
    99+
    2023-06-17
  • LINQ to DataSet问题怎么解决
    本篇内容主要讲解“LINQ to DataSet问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ to DataSet问题怎么解决”吧!使用 LINQ to DataSet 可...
    99+
    2023-06-17
  • LINQ和ADO.NET技术怎么理解
    本篇内容主要讲解“LINQ和ADO.NET技术怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ和ADO.NET技术怎么理解”吧!LINQ和ADO.NET如今,许多业务开发人员都必须...
    99+
    2023-06-18
  • LINQ to SQL简单的单表批量删除怎么实现
    这篇文章主要讲解了“LINQ to SQL简单的单表批量删除怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ to SQL简单的单表批量删除怎么实现”吧!如何获取SQL呢,LI...
    99+
    2023-06-17
  • Linq数据和对象怎么理解
    这篇文章主要讲解了“Linq数据和对象怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linq数据和对象怎么理解”吧!大家知道在开发数据时,数据一般是关系型数据,然而数据和对象是什么关...
    99+
    2023-06-17
  • LINQ语法怎么理解
    这篇文章主要介绍“LINQ语法怎么理解”,在日常操作中,相信很多人在LINQ语法怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LINQ语法怎么理解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!程序...
    99+
    2023-06-17
  • 怎么理解Django ORM操作
    本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Django ORM操作”吧!表结构设计还是从实际角度出...
    99+
    2022-10-19
  • LINQ基础概念怎么理解
    本篇内容介绍了“LINQ基础概念怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!要想更好地了解LINQ,首先需要了解LINQ基础概念。...
    99+
    2023-06-17
  • LINQ查询架构怎么理解
    本篇内容主要讲解“LINQ查询架构怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ查询架构怎么理解”吧!LINQ(发音:Link)是Language Integrated Quer...
    99+
    2023-06-17
  • LINQ模糊查询怎么理解
    本篇内容主要讲解“LINQ模糊查询怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LINQ模糊查询怎么理解”吧!LINQ模糊查询实现的意义:为了避免即使实现,效率也不是很高,LINQ提供了...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作