LINQ不支持枚举类型吗

LINQ不支持枚举类型吗,第1张

linq当然支持枚举,你用的是Linq2EF,它的查询时需要转换为sql语句的,所以必定是需要数据库支持的类型。如果数据库有相应字段那么在语句里把枚举强转int即可。但你既然数据库里根本没有这个字段,那么自然也不能用linq2ef做查询,显然必须先用linq2ef查询后把结果集toList/toArray之类转为实际集合而非表达式树后再用linq做查询,这时候如果你的实体类中这个字段就是枚举的话,那么直接用枚举也没问题。

假设你上图表格数据为 DataTable dt,列分别为AA,BB,CC,DD

var query = from p in dtAsEnumerable()

//分组

group p by new

{

t1 = pField<int>("AA")ToString()Substring(0, pField<int>("AA")ToString()Length - 2),

t2 = pField<double>("BB"),

t3 = pField<string>("CC")

} into g

select new

{

ColA = gKeyt1,

ColB = gKeyt2,

ColC = gKeyt3,

ColD = gSum(c => cField<int>("DD"))

};

//转datatable

DataTable dtNew = dtClone();

DataRow drNew;

foreach (var p in query)

{

drNew = dtNewNewRow();

drNew["AA"] = pColA;

drNew["BB"] = pColB;

drNew["CC"] = pColC;

drNew["DD"] = pColD;

dtNewRowsAdd(drNew);

}

dtNew 为最终结果

注:转换过程中要考虑空值的情况

你好:

EF可以支持多数据库的,比如sql server, mysql , oracle,它可以做到迁移数据库,可以几乎不改代码,但是,edmx其实是一个配置文件,也包含了目标数据库的信息。

如果要做到更改配置就可以切换数据库,那么,有以下几点:

1:3种数据库的provider的文档要仔细看,确认哪些功能是不被支持的,取支持功能的最小集,写进开发规范,规定哪些linq语句不允许写。

2:为3种数据库准备3套edmx,这样比较简单,也可以把ssld之类生成在dll之外,然后动态修改,但容易出错且麻烦。不论是dbfirset还是codefirst,根据目标数据库类型重新生成edmx都比较简单。

3:更改连接串,EF的连接串中,需要指定传统连接串/EF的provider/相应的edmx配置(ssld,csdl,msl),把这3个要素都根据1,2配置为你的目标数据库对应的配置之后,理论上,你的代码就可以直接运行。

以上就是关于LINQ不支持枚举类型吗全部的内容,包括:LINQ不支持枚举类型吗、C#用LINQ *** 作Datatable数据库、entity framework 支持哪些数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9702055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存