LINQ IEnumerable和List

时间:2011-12-18 21:15:45

标签: c# linq

此函数返回一个字典,其中包含来自IEnumerable对象的所有键名值。我想过滤掉我传入的列表中不存在的任何项目。我只想要以cols.Name存在的属性

    public static Dictionary<string, string> GetDataRowFromObject(IEnumerable<NameValue<string, object>> properties, List<ColDefModel> cols)
    {
        var dataRow = new Dictionary<string, string>();
        foreach (NameValue<string, object> 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;
    }

2 个答案:

答案 0 :(得分: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());

希望这能说明为什么你的方法是不必要的。

答案 1 :(得分:0)

如果我正确理解了这个问题,请尝试通过以下方式解决问题:

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

而不是properties。如果性能存在问题,请尝试在cols中创建一些名称的哈希列表(如HashSet);说它叫colNames,然后将上面改为x => colNames.ContainsKey(x.Name)