使用linq显示具有不同ID的一个列表中的重复项

时间:2013-11-07 10:13:57

标签: c# linq frameworks entity

我有一张表

ID  Name  ExcelID

1   a     1

2   b     1

3   a     2

4   b     2

5   c     2

我需要显示两个Excel ID之间的重复项,因此输出应该显示'C',因为它是excelid 1和amp;之间的唯一值。 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方法来显示不同的值,它只显示两个列表中的所有值

2 个答案:

答案 0 :(得分:0)

var uniqueItems = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
   .GroupBy(p => p.Name)
   .Where(p => p.Count() == 1)
   .Select(p => p.FirstOrDefault());

应该做什么?

在您提供的列表上尝试,它返回整齐的项目(5,“c”,2)

答案 1 :(得分:0)

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

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();