【问题标题】:Show duplicates from one list with different ID's using linq使用 linq 显示具有不同 ID 的列表中的重复项
【发布时间】:2013-11-18 22:29:59
【问题描述】:

我有一张桌子和

ID  Name  ExcelID

1   a     1

2   b     1

3   a     2

4   b     2

5   c     2

我需要显示两个 Excel ID 之间的重复项,因此输出应该显示“C”,因为这是 excelid 1 和 2 之间的唯一值。因此,我使用下面的查询来比较这两组数据。

var assets = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
            .Where(c => c.FORATExcelId == fptexcel)
            .GroupBy(x => x.Name)
            .Select(y => y.FirstOrDefault()).ToList();


var assetsold = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
            .Where(c => c.FORATExcelId == fptexcelprevious)
            .GroupBy(x => x.Name)
            .Select(y => y.FirstOrDefault()).ToList();

我已将数据分组到两个列表中,一个是 excel id 1,第二个查询是 2。

但是,如果我尝试使用 except 方法来显示不同的值,它只会显示两个列表中的所有值

【问题讨论】:

  • 你的问题很不清楚......为什么C是独一无二的?这两个列表在哪里?
  • C 是唯一出现在 ExcelId 2 但不在 1 中的值。这两个列表由 assets 和 assetsold 查询组成

标签: c# linq frameworks entity


【解决方案1】:

您可以搜索只得到一个结果的名称:

var uniqueResult = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
        .Where(c => c.FORATExcelId == fptexcel || c.FORATExcelId == fptexcelprevious)
        .GroupBy(x => x.Name)
        .Where(c => c.Count() == 1)
        .Select(y => y.FirstOrDefault()).ToList();

【讨论】:

  • 如果我想显示已添加或删除的值,是否需要添加另一个 where 子句来检查 excelid 是否与之前的 excelid 匹配?
  • excelid = previousexcelid 是什么意思?我不确定你想要实现什么
【解决方案2】:
var uniqueItems = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
   .GroupBy(p => p.Name)
   .Where(p => p.Count() == 1)
   .Select(p => p.FirstOrDefault());

应该这样做吗?

在你给出的列表上试了一下,它返回了整齐的 item (5, "c", 2)

【讨论】:

  • 谢谢,再问一个问题.. 例如,我怎样才能只显示 excelid 4 和 8 中名称的重复项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多