2013-10-23 13 views
25

VS 2012でWeb APIを作成しました。 1つの列「カテゴリ」からすべての値を取得しようとしています。重複して返されるリストLINQを使用して列内のすべての異なる値を選択

私はこのコードを使用して特定のカテゴリの商品を入手しました。カテゴリの完全なリストを取得するにはどうしたらいいですか?

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

で成功していますか? –

+0

はい、このコードは特定のカテゴリで商品を取得するために使用されましたが、カテゴリの完全なリストを取得するためにこれを変更したいと思います。 GetCatgoriesList()。カテゴリは商品表の列なので、各商品に関連する重複した値が列に表示されます。私はテーブルに製品を分類するために使用されるカテゴリのリストが必要です。 – Tester

+2

もしそうなら、以下の答えがうまくいくはずですが、結果は 'IEnumerable 'であり、 'distinct categories'の完全なリストを出力するために反復することができます。 –

答えて

41

ユニークなカテゴリーました:Scountry
列:countryID、COUNTRYNAME

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

私はこれを試しましたが、ビルドエラーが発生しました。暗黙的に型 'System.Collections.Generic.IEnumerable 'を 'System.Collections.Generic.IEnumerable 'に変換できません。明示的な変換があります(キャストがありませんか?) – Tester

+0

@Tester質問のKing Kingのコメントを参照してください。 – Alireza

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

簡単でシンプルな

+0

これはIenumerables/Listsで作業するときのより良い方法です。 (x => x.EmpId == 100) .GroupBy(x => x.SaleDate).Select(y => y.First())。Distinct() ; –

1

を私は次の詳細 クラスと個別の行を見つけなければなりません、isactive
これには主キーはありません。私は、あなたが `category`で製品を得るとき、あなたの質問はあなたがここで明確なものだ、同じ` category`を持っている必要がありました `products`もちろん、私には明らかではないが、followinクエリ

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; 
    } 
関連する問題