区别于不使用LINQ

Dim*_*ngo 12 c# linq

我想使用distinct从LIST中删除重复的行.

这是结果集(如您所见,重复索引12和14)

id  idIndice    idName         idTipo   tamanho     caminho
12  11          Processo       3        10          C:\Program Files\Empenho\Senha.txt
13  13          Endereço       1        250         C:\Program Files\Empenho\Senha.txt
14  12          Número         2        5           C:\Program Files\Empenho\Senha.txt
15  9           Cep            5        8           C:\Program Files\Empenho\Senha.txt 
16  10          Dt. de Nasc.   4        0           C:\Program Files\Empenho\Senha.txt
12  11          Processo       3        10          C:\Program Files\Empenho\Senha.txt
14  12          Número         2        5           C:\Program Files\Empenho\Senha.txt
Run Code Online (Sandbox Code Playgroud)

这是我想要的sql(这样做)

select DISTINCT u.id, u.idIndice, t.idName, t.idTipo, t.tamanho, l.caminho
from  tgpwebged.dbo.sistema_Indexacao as u
join  tgpwebged.dbo.sistema_Indexes as t on u.idIndice = t.id
join  tgpwebged.dbo.sistema_Documentos as l on u.idDocumento = l.id
join  tgpwebged.dbo.sistema_DocType_Index as v on t.id = v.indexId
where u.idDocumento = 10 
Run Code Online (Sandbox Code Playgroud)

这是我想要适应的LINQ

var docObj = from u in context.sistema_Indexacao
join t in context.sistema_Indexes on u.idIndice equals t.id
join l in context.sistema_Documentos on u.idDocumento equals l.id
join v in context.sistema_DocType_Index on t.id equals v.indexId
join m in context.sistema_DocType on v.docTypeId equals m.id
where u.idDocumento == id
select new Gedi.Models.OperacoesModel.getDocIndex
{ ...  };
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

List<Gedi.Models.OperacoesModel.getDocIndex> docIndexModelDup = docObj.ToList();
List<Gedi.Models.OperacoesModel.getDocIndex> docIndexModel =
docIndexModelDup.Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

但我仍然得到相同的7行,好像根本没有DISTINCT.

为什么?

jru*_*ell 6

如果你想在sql中执行Distinct,请在ToList()之前调用Distinct().

var docObj = (from u in context.sistema_Indexacao
    join t in context.sistema_Indexes on u.idIndice equals t.id
    join l in context.sistema_Documentos on u.idDocumento equals l.id
    join v in context.sistema_DocType_Index on t.id equals v.indexId
    join m in context.sistema_DocType on v.docTypeId equals m.id
    where u.idDocumento == id
    select new Gedi.Models.OperacoesModel.getDocIndex
    { ...  }).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)


Chr*_*tte 5

var docIndexModel = docIndexModelDup
    .GroupBy(x => x.Id)
    .Select(g => g.First());
Run Code Online (Sandbox Code Playgroud)


lan*_*nte 1

尝试:

var distinctRowsById = docObj.Select(i => i.Id)
    .Distinct()
    .Select(i => docObj.First(o => o.Id == i)
Run Code Online (Sandbox Code Playgroud)

  • 我还没有尝试过,但是查看您的代码让我认为它不会删除重复项,因为每一行当然都会有一个与同一组中的不同 ID 列表相匹配的 Id ..? (5认同)