如何编写LINQ语句以从动态列表中获取具有特定扩展名的文件?

时间:2016-03-21 17:57:11

标签: c# linq

我有一个动态对象列表

<%= f.text_area ... %>

其中一个项目看起来类似于下面的内容:

List<dynamic> myDynamicList;

如果我想获得扩展名为.dll的所有文件,我会按如下方式使用LINQ:

dynamic d = new ExpandoObject();
d.FileName = "SomeLibrary.dll";
d.ClientCode = "XX";

但是,我真正想做的是获取扩展名为 .dll .exe 的所有文件。我不想在FileName上使用OR逻辑,因为我想在列表或数组中定义扩展。如何使用LINQ实现这一目标?

2 个答案:

答案 0 :(得分:3)

您可以使用列表保存所需的所有扩展程序,并在查询中使用Contains扩展名方法:

var list=new List<string>(){".dll", ".exe"};
var libraries = myDynamicList.Where(d => list.Contains(Path.GetExtension(d.FileName)))
                             .Select(d => d.FileName);

您还可以使用Any扩展方法:

 var libraries = myDynamicList.Where(d => list.Any(e=>e==Path.GetExtension(d.FileName)))
                              .Select(d => d.FileName);

答案 1 :(得分:0)

web.config


<configuration>
   ....
   <appSettings>
      <add key="ExtensionArray" value="dll,exe"/>
   </appSettings>
   ....
</configuration>


C# snippet

string ExtensionArray== WebConfigurationManager.AppSettings["Extension"];

var list=ExtensionArray.Split(',').ToList<string>();

var libraries = myDynamicList.Where(d => list.Any(e=>e==Path.GetExtension(d.FileName)))
                              .Select(d => d.FileName);