几个常用的LINQ查询

用来备份,以后更新并查阅。:)

 

#region GetFiles

/// <summary>
/// 获得指定路径下的所有文件
/// </summary>
/// <param name="path">有效路经</param>
/// <returns></returns>
public IEnumerable<FileInfo> GetFiles(string path)
{
    DirectoryInfo directory = new DirectoryInfo(path);
    if (directory == null)
        return null;
    return
        from f in directory.GetFiles()
        select f;
}

/// <summary>
/// 测试GetFiles
/// </summary>
[TestMethod]
public void TestGetFiles()
{
    string path = Environment.SystemDirectory;
    var result = GetFiles(path);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(FileInfo));
        Assert.IsTrue(File.Exists(item.FullName));
    }
}

#endregion

#region GetReturnSpecifiedInterfacedMethods

/// <summary>
/// 获得指定Assembly中返回指定接口类型名称的方法信息
/// </summary>
/// <param name="assembly">Assembly</param>
/// <param name="interfaceType">接口类型名称</param>
/// <returns></returns>
public IEnumerable<MethodInfo> GetReturnSpecifiedInterfacedMethods(Assembly assembly, string interfaceTypeName)
{
    if (assembly == null) throw new ArgumentNullException("assembly");
    if(string.IsNullOrEmpty(interfaceTypeName)) throw new ArgumentNullException("interfaceTypeName");

    return
        from type in assembly.GetTypes()
        from method in type.GetMethods()
        where
            method.ReturnType.GetInterface(interfaceTypeName) != null
        select method;
}

/// <summary>
/// 测试GetReturnSpecifiedInterfacedMethods
/// </summary>
[TestMethod]
public void TestGetReturnSpecifiedInterfacedMethods()
{
    string typeName = "IEnumerable`1";
    Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];
    var result = GetReturnSpecifiedInterfacedMethods(assembly, typeName);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(MethodInfo));
        Assert.IsNotNull(item.ReturnType.GetInterface(typeName));
    }
}

#endregion

#region GetAssemblyStaticMethods

/// <summary>
/// 获得指定Assembly包含的静态方法信息
/// </summary>
/// <param name="assembly"></param>
/// <returns></returns>
public IEnumerable<MethodInfo> GetAssemblyStaticMethods(Assembly assembly)
{
    if (assembly == null) throw new ArgumentNullException("assembly");
    return
        from type in assembly.GetTypes()
        from method in type.GetMethods()
        where
            method.IsStatic
        select method;
}

/// <summary>
/// 测试GetAssemblyStaticMethods
/// </summary>
[TestMethod]
public void TestGetAssemblyStaticMethods()
{
    Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];
    var result = GetAssemblyStaticMethods(assembly);
    Assert.IsNotNull(result);
    foreach (var item in result)
    {
        Assert.IsInstanceOfType(item, typeof(MethodInfo));
        Assert.IsTrue(item.IsStatic);
    }
}

posted @ 2009-01-22 22:56  蜡笔小王  阅读(844)  评论(0编辑  收藏  举报