Si vous utilisez .NET 4.0, vous pouvez utiliser Clay puis écrire une méthode qui retourne une ligne IEnumerable pour la ligne et qui fait le code comme ci-dessous possible
from record in GetRecords("myFile.csv",new []{"Foo","Bar"},new[]{","})
where record.Foo == "Baz"
select new {MyRealBar = int.Parse(record.Bar)
la méthode pour projeter le CSV dans une séquence d'objets d'argile pourrait être créé comme:
private IEnumerable<dynamic> GetRecords(
string filePath,
IEnumerable<string> columnNames,
string[] delimiter){
if (!File.Exists(filePath))
yield break;
var columns = columnNames.ToArray();
dynamic New = new ClayFactory();
using (var streamReader = new StreamReader(filePath)){
var columnLength = columns.Length;
string line;
while ((line = streamReader.ReadLine()) != null){
var record = New.Record();
var fields = line.Split(delimiter, StringSplitOptions.None);
if(fields.Length != columnLength)
throw new InvalidOperationException(
"fields count does not match column count");
for(int i = 0;i<columnLength;i++){
record[columns[i]] = fields[i];
}
yield return record;
}
}
}
Qu'est-ce que v ersion de .NET utilisez-vous –
@Rune FS J'utilise .net 4.0 – oguzh4n