Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ IEnumerable和List_C#_Linq - Fatal编程技术网

C# LINQ IEnumerable和List

C# LINQ IEnumerable和List,c#,linq,C#,Linq,此函数返回一个字典,其中包含来自IEnumerable对象的所有键名值。我想过滤掉我正在传递的列表中不存在的任何项目。我只想要作为cols.Name存在的属性 public static Dictionary<string, string> GetDataRowFromObject(IEnumerable<NameValue<string, object>> properties, List<ColDefModel> cols) {

此函数返回一个字典,其中包含来自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;
    }

如果我正确理解了问题,请尝试通过以下方式进行讨论:

properties.Where(x => cols.Any(y => x.Name == y.Name))
而不是通过属性。若性能是一个问题,那个么试着在cols中创建一个类似于;假设它名为colNames,然后将上面的更改为x=>colNames.ContainsKeyx.Name


希望这能告诉您为什么您的方法是不必要的。

1您正在传递一个从未使用过的参数2您可能正在执行一个冗余的try-catch块,但我不能确定您的代码试图执行什么操作。3如果出现同名实例,则覆盖值
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());