1

私はここで簡単なものが欠けていると思いますが、それを理解することはできません。どんな種類の助けも大歓迎です。

問題resultsWithMedia配列に含まれる結果には、の最初の項目と一致した結果のみが含まれますmediaTypesListExists()、、を使ってみましたが、うまくFind()いきContains()ませんでした。毎回同じような振る舞いをします。

:に値mediaTypesListが含まれている場合、はタイプがの結果のみを保持します。{"video", "link", "photo"}resultsWithMediavideo

私が達成しようとしているのは、の値のいずれかに一致resultsWithMediaする値を保持することです。typemediaTypesList

コード

 public void GetPostsWithMedia(string from, string before, string mediaTypes)
    {
        // ... some variable declarations

        List<string> mediaTypesList = new List<string>();

        if (!string.IsNullOrEmpty(mediaTypes))
        {
            var list = mediaTypes.Split(',');

            foreach (var type in list)
            {
                mediaTypesList.Add(type);
            }
        }

        // ... some more code 

        // Note: r.Data is a Dictionary that contains strings as it's values
        var resultsWithMedia = (from r in response.Results
                                where r.Data.ContainsKey("Type") && mediaTypesList.Exists(t => t == r.Data["Type"]) 
                                select new 
                                {
                                    // ... different variables
                                }).ToArray();

        }
    }
4

4 に答える 4

1

1つのクエリでメディアを使用して結果を取得できます。

var query = from r in response.Results.Where(x => x.Data.ContainsKey("Type"))
            join m in mediaTypes.Split(',')
                 on r.Data["Type"] equals m
            select new {
                ...
            };

メディアタイプとデータで大文字と小文字を区別しない比較が必要な場合は、ToLower()を適用しますon r.Data["Type"].ToLower() equals m.ToLower()m.Trim()文字列を分割した後、メディアタイプ名に空のスペースがある場合にも適用することを検討してください(Euphoricが提案したように)。

于 2013-01-02T19:13:14.283 に答える
1

コードを少し書き直しました。

var mediaTypesList = mediaTypes.Split(',').Select(e => e.Trim()).ToList();

var resultsWithMedia = response.Results.Data.Where(e => e.ContainsKey("Type") && mediaTypesList.Contains(e["Type"]))
            .Select(a => new {
                              // ... different variables
                              }).ToArray();

私にはもっとシンプルに見えます。

于 2013-01-02T19:30:30.357 に答える
0

mediaTypes前後のスペースを確認してください,

できれば変更する

mediaTypesList.Add(type.Trim());
于 2013-01-02T18:19:54.257 に答える
-1

私があなたを正しく理解しているなら、あなたは最初の要素で一致させたいです。 Enumerable.First()はトリックを行います:

   var resultsWithMedia = (from r in response.Results
                            where r.Data.ContainsKey("Type") && 
                            mediaTypesList.First(t => t == r.Data["Type"]) 
                            select new 
                            {
                                // ... different variables
                            }).ToArray();
于 2013-01-02T18:38:42.370 に答える