3

Linq var を List.my c# コードに変換しようとしています

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = new List<HyperlinkInfo>();
        lst = obj.GetAllHyperlink();
        //lst = lst.Select(x => x.Attraction).ToList();
        var k = lst.Select(x => x.Attraction).Distinct();            
}

Line varがOKになるまで上記のコードを見ると、k = lst.Select(x => x.Attraction).Distinct();var kをListに変換できます。

4

6 に答える 6

6

あなたのコメントによると、各値(文字列)HyperlinInfoに対して単一のオブジェクトが必要です。Attractionしたがって、グループ化とを使用しますToList()

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = obj.GetAllHyperlink();
        return lst.GroupBy(x => x.Attraction) // group links by attraction
                  .Select(g => g.First()) // select first link from each group
                  .ToList(); // convert result to list
}

また、morelinq DistinctBy拡張 (NuGet から入手可能)を使用することもできます。

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = obj.GetAllHyperlink();
        return lst.DistinctBy(x => x.Attraction).ToList();
}
于 2013-03-12T09:49:42.993 に答える
5

を使用しEnumerable.ToList<TSource> Methodます。ToList()クエリの最後に追加するか、

return k.ToList();

したがって、あなたの方法は次のようになります。

private List<HyperlinkInfo> GetHyperlinkByCode()
{
        TourInfoBusiness obj = new TourInfoBusiness();
        List<HyperlinkInfo> lst = new List<HyperlinkInfo>();
        lst = obj.GetAllHyperlink();
        //lst = lst.Select(x => x.Attraction).ToList();
        var k = lst.Select(x => x.Attraction).Distinct();
        return k.ToList();
}

しかし、型オブジェクトx.Attractionでなければなりません。HyperLinkInfo

編集:コメントに基づいて、文字列であると思われます。選択ステートメントでx.Attractionクラスのオブジェクトを作成し、そのリストを返す必要があります。Project.Bll.HyperlinkInfo何かのようなもの:

var k = lst.Select(new Project.Bll.HyperLinkInfo(x => x.Attraction)).Distinct();

Project.Bll.HyperlinkInfoコンストラクターが文字列パラメーターを受け取ってHyperLinkInfoオブジェクトを返すと仮定します。

于 2013-03-12T09:45:10.133 に答える
2

これを使って:

var k = lst.Select(x => x.Attraction).Distinct().ToList();

kx.Attractionタイプのリストです。の場合x.Attractionstring、これを使用します。

List<string> k = lst.Select(x => x.Attraction).Distinct().ToList();
于 2013-03-12T09:45:42.633 に答える
0

このコードを試してください:

return (List<Hyperlink Info>) k
于 2013-03-12T10:17:51.830 に答える
0

moreLinqの DistinctBy を追加してみてください:

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

そしてあなたのコードでそれを呼び出します:

lst.DistinctBy(x => x.Attraction).toList();
于 2013-03-12T10:26:53.350 に答える
0

クエリに使用ToList()します。

List<T>からを作成しますIEnumerable<T>

List<HyperlinkInfo> k = lst.Select(x => x.Attraction).Distinct().ToList();
于 2013-03-12T09:46:30.140 に答える