Linq查询返回重复项

康纳

因此,我有两个DataTable,它们均取自同一ODBC数据源。一个包含用于销售的行(Estado ='VENTAS'),另一个包含Estado ='EXIST'的行(数据库为每个销售创建行对,一个指示销售信息,另一个指示有关商店库存中库存变动的信息,因此在为了知道哪个商店进行了销售,我必须将每个VENTAS行与相应的EXIST行匹配(通过“ Documento” ID字段),并从Exist行中获取“ Deposito”值)。

我建立了这个查询来执行此操作(我正在使用的ODBC驱动程序不允许进行联接,因此在Linq中执行此操作是下一个最好的选择)

            DataTable dtResult = new DataTable();

            dtResult.Columns.Add("Documento", typeof(Int64)); 
            dtResult.Columns.Add("Fecha", typeof(DateTime));
            dtResult.Columns.Add("Articulo", typeof(string));
            dtResult.Columns.Add("Deposito", typeof(string));
            dtResult.Columns.Add("ImpDMn", typeof(decimal));
            dtResult.Columns.Add("Cantidad", typeof(decimal));
            dtResult.Columns.Add("Partida", typeof(string));

            var result = from dataRows1 in VentasDT.AsEnumerable() //VentasDT is the DataTable with the VENTAS data
                         join dataRows2 in ExistDT.AsEnumerable() // ExistDT is the DataTable with the EXIST data
                         on dataRows1.Field<Int64>("Documento") equals dataRows2.Field<Int64>("Documento")
                         select dtResult.LoadDataRow(new object[]
         {
            dataRows1.Field<Int64>("Documento"),
            dataRows1.Field<DateTime>("Fecha"),
            dataRows1.Field<string>("Articulo"),
            dataRows2.Field<string>("Deposito"),
            dataRows1.Field<decimal>("ImpDMn"),
            dataRows1.Field<decimal>("Cantidad"),
            dataRows1.Field<string>("Partida"),
          }, false);
            result.CopyToDataTable();

它可以工作,但是由于某些原因它会重复一些行。我检查了重复的行,它们彼此相同。它们的文档编号是相同的(每个Documento编号只有一个VENTAS和一个EXIST行,包括这些重复项),所以我不知道为什么要重复它们。我检查了要加入的源数据表,同样,每个重复项中只有一行对应。EXIST表大于VENTAS表(它还记录非销售商店之间的转移),但联接表大于任一表(但还不及两者的总和)

VENTAS: 85123
EXIST: 116857
JOIN: 141287

我的查询有问题吗?我应该包括一些GROUP BY子句还是.Distinct还是这个结构(就我所见,应该模仿一个左联接)就足够了?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

由于执行此连接的唯一原因是"Deposito"要从中获取字段的值,因此ExistDT可以将其替换为字典查找。这是您可以执行的操作:

var depositoPorDocumento = ExistDT.AsEnumerable().ToDictionary(
    dr => dr.Field<Int64>("Documento"),
    dr => dr.Field<string>("Deposito")
);
foreach (var vr in VentasDT.AsEnumerable()) {
    Int64 id = Field<Int64>("Documento");
    string deposito;
    if (!depositoPorDocumento.TryGetValue(id, out deposito)) {
        continue;
    }
    dtResult.LoadDataRow(new object[]
     {
        id,
        vr.Field<DateTime>("Fecha"),
        vr.Field<string>("Articulo"),
        deposito,
        vr.Field<decimal>("ImpDMn"),
        vr.Field<decimal>("Cantidad"),
        vr.Field<string>("Partida"),
      }, false);
}
result.CopyToDataTable();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL查询返回重复项

来自分类Dev

LINQ:返回列表中的非重复项

来自分类Dev

LINQ:返回列表中的非重复项

来自分类Dev

Hibernate查询返回的重复项是什么

来自分类Dev

查询子对象时返回的重复项

来自分类Dev

Laravel SQL 查询返回重复项

来自分类Dev

尽管嵌套查询不返回重复项,但查询返回重复项的查询

来自分类Dev

左外部Join查询返回SQL Server中的重复项

来自分类Dev

查询以返回所有行的所有重复项

来自分类Dev

查询以返回所有行的所有重复项

来自分类Dev

在SQL Server中按查询分组返回重复项

来自分类Dev

查询 Azure Cosmos DB 以不返回重复项

来自分类Dev

LINQ查询按类别返回联接项的实体

来自分类Dev

LINQ Join和Sum查询返回重复的结果

来自分类Dev

查询以GROUP BY删除重复项

来自分类Dev

mysql查询更新重复项

来自分类Dev

mysql查询更新重复项

来自分类Dev

重复时从查询中删除重复项

来自分类Dev

rxjs订阅返回重复项

来自分类Dev

返回列表中的重复项

来自分类Dev

Observable distinctUntilChanged 返回重复项

来自分类Dev

具有空值的SQL查询分组返回重复项

来自分类Dev

返回LINQ查询结果

来自分类Dev

从Linq查询返回数组

来自分类Dev

重复使用LINQ查询

来自分类Dev

linq查询返回唯一项目的嵌套列表

来自分类Dev

linq查询返回唯一项目的嵌套列表

来自分类Dev

为什么此 Linq 查询返回的结果与 SQL 等效项不同?

来自分类Dev

MySQL查询返回重复的行