【发布时间】:2015-11-25 09:19:42
【问题描述】:
像这样执行交叉表操作时出现错误。
var rows = from a in db_data.AsEnumerable()
join b in cust_data.AsEnumerable()
on a["SERVICE_ZIP"].ToString().Trim().ToLower() equals b["Zip"].ToString().Trim().ToLower()
where
a["SSS"].ToString().Trim().ToLower() == b["SSS"].ToString().Trim().ToLower() &&
a["ttt"].ToString().Trim().ToLower() == b["ttt"].ToString().Trim().ToLower()
into g
where g.Count() > 0
select a;
DataTable merged;
if (rows.Any())
merged = rows.CopyToDataTable();
else
merged = cust_data.Clone();
【问题讨论】:
-
我尝试了其他命令,但不起作用
-
谢谢。错误是“查询正文必须以 C# 中的 select 子句或 group 子句结尾”
-
这不是“跨表操作”。通过调用“AsEnumerable”,您可以强制将 整个 表加载到内存中。与将从表 A 加载几条记录的 LINQ-to-SQL 查询不同,您有一个 LINQ to Objects 查询,该查询必须处理从数据库加载的两个大型内存集合。我怀疑这是你想要做的。
-
非常感谢您的回复。是的@PanagiotisKanavos。我的目标是将数据加载到内存中并像正常的 SQL 操作一样进行比较,如下所示 SELECT * FROM data d, c_data c WHERE c.ZIP =d.SERVICE_ZIP and c.sss =d.sss and c.ttt =d。 tt。我需要将此 SQL 语句更改为 LINQ,然后输出需要再次存储在 Datatable 中。你能帮帮我吗?
-
LINQ 不能替代 SQL。将所有内容加载到内存中比执行 SQL 语句慢。事实上,简单地执行内存过滤所需的循环将比访问数据库要慢,因为内存中没有索引。如果你有一个有效的 SQL 查询,你为什么要使用 LINQ?如果你真的需要,至少创建一个视图并将你的 DTO 映射到该视图
标签: mysql linq linq-to-sql