0

我正在按数据库中的数据源填充下拉列表,但是我的数据库有重复值(同一列),这反映在我的下拉列表中具有重复值。

我正在使用实体框架和 lambda 所以我尝试了这个:

  public IList<ModelSQL.puzzlecontent> GetID(int id)
    {
        return context.puzzlecontents.Where(i => i.WordPuzzleID == id).Distinct().ToList();
    }

ModelSQL 是我的文件夹名称,由我的 CRUD 类文件 (puzzlecontent) 组成。

但是,上面的代码没有显示任何错误,但它无助于删除下拉列表中的重复值。

4

2 回答 2

2

你可以使用 GroupBy

public IList<ModelSQL.puzzlecontent> GetID(int id)
{
   //for grouping by multiple properties you can use Groupby like
   // .GroupBy(i=>new { i.WordPuzzleID,i.SecondProperty})
   return context.puzzlecontents
                 .Where(i => i.WordPuzzleID == id)
                 .GroupBy(i=>i.WordPuzzleID)
                 .Select(g=>g.First()).ToList();
}

或者对于 LINQ to Objects 你可以使用MoreLinq的 DistinctBy

public IList<ModelSQL.puzzlecontent> GetID(int id)
    {
        return context.puzzlecontents.Where(i => i.WordPuzzleID == id).DistinctBy(i=>i.WordPuzzleID ).ToList();
    }
于 2013-09-03T05:56:18.627 回答
1

您在所有列上调用 Distinct。如果您有一个唯一的列,例如该表中的自动标识,您将始终获得所有记录。

在 distinct 之前使用 select 并仅选择所需的列并排除唯一列

 public IList<ModelSQL.puzzlecontent> GetID(int id)
    {
        return context.puzzlecontents.Where(i => i.WordPuzzleID == id).Select(pc=>new{
              Column1 = pc.Column1,Column2 = pc.Column2    
        }).Distinct().ToList();
    }
于 2013-09-03T06:17:13.300 回答