【问题标题】:Linq- A query body must end with a select clause or a group clause in C#Linq - 查询主体必须以 C# 中的 select 子句或 group 子句结尾
【发布时间】: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


【解决方案1】:

使用into 子句允许将LINQ 理解表达式链接在一起,这是非常强大的。但每个都必须是完整的理解表达式。

在您的代码中 into 之前没有 selectgroup 子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多