tags:

views:

1033

answers:

4
+2  A: 
IList<string> fileNameSubstringValues =
  (
    from 
      file in codeToGetFileListGoesHere
    select 
      file.Name.
        Substring(0, file.Name.Length - 
          (file.Name.Length - file.Name.IndexOf(".config.xml"))).ToList();

Enjoy =)

casperOne
+4  A: 

Try something like this:

var fileList = files.Select(file =>
                            file.Name.Substring(0, file.Name.Length -
                            (file.Name.Length - file.Name.IndexOf(".config.xml"))))
                     .ToList();
CMS
Almost had it in time.
Will
Voted up: I prefer the extension method syntax to the query syntax here, since there's really no query: your goal is to perform a transform on all the elements. There's no 'where' or 'orderby' or a crossing 'select' even 'select new { x, y }.
Jay Bazuzi
@Jay, I also prefer the extension method syntax for simple projections, the query syntax I think I only use it when doing joins...
CMS
better because 1) fluent interface 2) no brackets around the query needed
Will
A: 

If you happen to know the type of the collection of FileInfos, and it's a List<FileInfo>, I'd probably skip the Linq and write:

        files.ConvertAll(
            file => file.Name.Substring(0, file.Name.Length - (file.Name.Length - file.Name.IndexOf(".config.xml")))
            );

or if it's an array:

        Array.ConvertAll(
            files,
            file => file.Name.Substring(0, file.Name.Length - (file.Name.Length - file.Name.IndexOf(".config.xml")))
            );

Mainly because I like saying "Convert" instead of "Select" to express my intent to a programmer reading this code.

However, Linq is part of C# now, so I think it's perfectly reasonable to insist that a reading programmer understand what Select does. And the Linq approach lets you easily migrate to PLinq in the future.

Jay Bazuzi
+1  A: 

FYI,

file.Name.Substring(0, file.Name.Length - (file.Name.Length - file.Name.IndexOf(".config.xml")))

is the same as

file.Name.Substring(0, file.Name.IndexOf(".config.xml"));

Also, if that string ".config.xml" appears before the end of the file name, your code will probably return the wrong thing; You should probably change IndexOf to LastIndexOf and check that the index position returned + 11 (the size of the string) == length of the filename (assuming you're looking for files ending in .config.xml and not just files with .config.xml appearing somewhere in the name).

Robert C. Barth
excellent point. i will modify my code.
shackett