使用LINQ选择列中的所有非重复值

oogrdqng  于 2022-12-06  发布在  其他
关注(0)|答案(4)|浏览(171)

我在VS 2012中创建了一个Web API。我试图从一个列“类别”中获取所有值,即所有唯一值,我不希望列表返回重复。
我使用此代码获取特定类别中的产品。如何获取完整的类别列表(类别列中的所有唯一值)?

public IEnumerable<Product> GetProductsByCategory(string category)
    {
        return repository.GetAllProducts().Where(
            p => string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase));
    }
8tntrjer

8tntrjer1#

我必须找到具有以下详细信息类的不同行:斯库特
列:国家ID、国家名称、活动
这里面没有主键。我已经成功完成了以下查询

public DbSet<SCountry> country { get; set; }
    public List<SCountry> DoDistinct()
    {
        var query = (from m in country group m by new { m.CountryID, m.CountryName, m.isactive } into mygroup select mygroup.FirstOrDefault()).Distinct();
        var Countries = query.ToList().Select(m => new SCountry { CountryID = m.CountryID, CountryName = m.CountryName, isactive = m.isactive }).ToList();
        return Countries;
    }
yhived7q

yhived7q2#

有趣的是,我在LinqPad中尝试了这两种方法,使用来自Dmitry Gribkov by的group的变体似乎更快。(也不需要最后的distinct,因为结果已经是distinct了。
我的代码(有些简单)是:

public class Pair 
{ 
    public int id {get;set;}
    public string Arb {get;set;}
}

void Main()
{

    var theList = new List<Pair>();
    var randomiser = new Random();
    for (int count = 1; count < 10000; count++)
    {
        theList.Add(new Pair 
        {
            id = randomiser.Next(1, 50),
            Arb = "not used"
        });
    }

    var timer = new Stopwatch();
    timer.Start();
    var distinct = theList.GroupBy(c => c.id).Select(p => p.First().id);
    timer.Stop();
    Debug.WriteLine(timer.Elapsed);

    timer.Start();
    var otherDistinct = theList.Select(p => p.id).Distinct();
    timer.Stop();
    Debug.WriteLine(timer.Elapsed);
}
8zzbczxx

8zzbczxx3#

要具有唯一类别:

var uniqueCategories = repository.GetAllProducts()
                                 .Select(p => p.Category)
                                 .Distinct();
xhv8bpkk

xhv8bpkk4#

var uniq = allvalues.GroupBy(x => x.Id).Select(y=>y.First()).Distinct();

轻松简单

相关问题