LINQ IEnumerableおよびList

この関数は、IEnumerableオブジェクトから来るすべてのキー名の値を持つ辞書を返します。私は渡されている私のリストに存在しない項目を除外したいと思います。私はちょうどcols.Nameとして存在するプロパティがほしいです

    public static Dictionary GetDataRowFromObject(IEnumerable> properties, List cols)
    {
        var dataRow = new Dictionary();
        foreach (NameValue property in properties)
        {
            try
            {
                if (property.Value == null)
                    dataRow[property.Name] = "";
                else
                    dataRow[property.Name] = property.Value.ToString();
            }
            catch (NullReferenceException e)
            {
                dataRow[property.Name] = "";
            }
        }
        return dataRow;
    }
3
1)あなたは決して使用しないパラメータを渡している2)おそらく冗長なtry catchブロックを実行しているが、あなたのコードが何をしようとしているのか分からない。 3)同じ名前のインスタンスが発生した場合は、値を上書きします。
追加された 著者 Ufuk Hacıoğulları,

2 答え

var dictionary = properties.Where(nv => nv.Value != null)
                           .Where(nv => cols.Any(c => c.ColName == nv.Name))
                           .ToDictionary(nv => nv.Name, nv => nv.Value.ToString());

うまくいけば、これはあなたの方法が不要な理由を示しています。

2
追加された

私が問題を正しく理解しているなら、あなたのforeachをやってみてください:

properties.Where(x => cols.Any(y => x.Name == y.Name))

instead of through properties. If performance is an issue, try making some sort of hashed list of the names in cols (like a HashSet); say it's called colNames, then change the above to x => colNames.ContainsKey(x.Name).

0
追加された