2016-01-11 2 views
4

J'utilise le code suivant pour interroger un fichier Excel dans LinqToExcel:LinqToExcel - InvalidCastException conduisant à objet doit implémenter erreur IConvertible

var excelFile = new LinqToExcel.ExcelQueryFactory(@"\"+txtFileName.Text.Replace(@"\\",@"\")); 

var properties = from p in excelFile.Worksheet<Property>() 
       where AssessmentID != null 
       select p; 
foreach (var autoP in properties) 
     doSomething(); 

Quand je regarde le débogueur d'exécution, je vois un tout « InvalidCastException » en regardant la "Results View" de la propriétés variable. Donc, je suppose qu'il y a quelque chose de funky avec ma définition de classe. Je suppose également que je n'ai pas besoin de mapper tous les membres de la classe au fichier Excel, mais seulement ceux que je considère comme appropriés.
Alors, Voici la définition de la classe ainsi:

public class Property 
{ 

    [DataMember] 
    public int? Year { get; set; } 

    [DataMember] 
    public string ChangeReason { get; set; } 

    [DataMember] 
    public string AssessmentID { get; set; } 

    [DataMember] 
    public string CallBackNotes { get; set; } 

    [DataMember] 
    public string InspectionNotes { get; set; } 

    [DataMember] 
    public string Notes { get; set; } 

    [DataMember] 
    public bool Authorization { get; set; } 

    [DataMember] 
    public string ChargeStatus { get; set; } 

    [DataMember] 
    public string LegalLandDesc { get; set; } 

    [DataMember] 
    public string Address { get; set; } 
    } 

est ici un lien vers le code source pour linqToExcel sur GitHub: LinqToExcel Les médicaments génériques sont plus complexes que je ne l'ai vu, et sont quelque chose que je (apparemment) besoin de rafraîchir.

Y a-t-il quelque chose de flagrant qui me manque et qui causerait ce problème? Des idées sur où chercher ou quoi faire pour résoudre ces erreurs?

Répondre

7

La clause where de la requête est à l'origine de l'erreur. Il faisait référence au mot-clé null qui n'était pas applicable dans le contexte. je l'ai changé:

where !String.IsNullOrEmpty(p.AssessmentID) 

Ceci a résolu mon problème. Note à l'attention de soi: Lorsque vous héritez du code d'autres utilisateurs, vérifiez d'abord les principes de base!

+0

OMG, votre message m'a sauvé un peu de chagrin ici. J'ai revisité un vieux projet aujourd'hui où une clause! = Null où initialement fonctionnait bien et avait été pendant quelques années, mais soudainement aujourd'hui a commencé à lancer cette même erreur. –

+0

Merci, vous m'avez sauvé la vie. –

+1

@Rolan - Vous avez identifié mon problème exact et votre correctif fonctionne, mais pourriez-vous expliquer pourquoi «null» n'est «pas applicable dans le contexte»? Ce problème ne semble pas se manifester dans LinqPad. –