エンティティフレームワークは異なる名前を選択します


回答:


270

ラムダ式を使用しています。

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();

1
たぶんちょっとした質問かもしれませんが、これはすべてのアドレスをC#コードレイヤーに返してからフィルターしますか、それとも適切なクエリをデータベースサーバーに渡して一意の値のみを返しますか?
DA

51

これを試して:

var results = (from ta in context.TestAddresses
               select ta.Name).Distinct();

これはあなたにあなたを与えるでしょうIEnumerable<string>-あなたは.ToList()それを得るためにそれを呼び出すことができますList<string>


1
そうすることで、グループ化よりもパフォーマンスが向上します。個別:SQL Server実行時間:CPU時間= 0ミリ秒、経過時間= 50ミリ秒。グループ化:SQL Server実行時間:CPU時間= 0 ms、経過時間= 112 ms。
Andre Mendonca、2015

24

@alliswellが示した方法は完全に有効ですが、別の方法もあります。:)

var result = EFContext.TestAddresses
    .GroupBy(ta => ta.Name)
    .Select(ta => ta.Key);

誰かのお役に立てば幸いです。


1
複数の列を選択する必要があったので、これは私にとって非常に便利でした
mamashare

16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

複数の列がある場合は、次のようにします。

DBContext.TestAddresses.Select(m => new {m.NAME, m.ID}).Distinct();

この例では、重複するCategoryIdおよびCategoryNameはありません。これが役立つことを願っています


4

Entity-Framework Select Distinct Name:

あなたがいる場合と仮定し、あなたが複数のテーブルを使用しているビューを使用して、あなたが、その場合には明確な適用する最初のあなたが変数に格納する値に持っている&あなたはこの1つのように、その変数に個別に適用することができます....

public List<Item_Img_Sal_VIEW> GetItemDescription(int ItemNo) 
        {
            var Result= db.Item_Img_Sal_VIEW.Where(p => p.ItemID == ItemNo).ToList();
            return Result.Distinct().ToList();
        }

または、この簡単な例を試すことができます

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function

こんにちは、これをテーブルで実行すると、エラーが発生します-> 文字列をIEnumreableに変換できません。リストを取得する方法を教えて、ドロップダウンリストにNVARCHARを含むテーブル列の個別の値を入力できますEF DB。
aggie 2014年

3



たとえば、Select()。Distinct() を使用します

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();

2

ORDER BY items must appear in the select list if SELECT DISTINCTエラーを回避するために、最善の方法は

var results = (
    from ta in DBContext.TestAddresses
    select ta.Name
)
.Distinct()
.OrderBy( x => 1);

1

Entity-Framework Select Distinct Name:

各グループの特定の列のすべての最初のデータが必要であると仮定します。

 var data = objDb.TableName.GroupBy(dt => dt.ColumnName).Select(dt => new { dt.Key }).ToList();

            foreach (var item in data)
            {
                var data2= objDb.TableName.Where(dt=>dt.ColumnName==item.Key).Select(dt=>new {dt.SelectYourColumn}).Distinct().FirstOrDefault();

               //Eg.
                {
                       ListBox1.Items.Add(data2.ColumnName);                    
                }

            }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.