InvalidCastException dans une requête LINQ

Pour cette requête LINQ je suis de l'exception ci-dessous:

(from row in ds.Tables[0].AsEnumerable()
 where row.Field<string>("Dept_line_code") == DeptCode &&
 row.Field<string>("Skill_Name") == skill &&
 row.Field<string>("Acct_Code") == account && row.Field<string>("Location") == dtNewTable.Rows[intRow]["Location"].ToString()
 select row.Field<int>("Presently_Available") == null ? 0 : row.Field<int>("Presently_Available")
).FirstOrDefault();

Exception de l'information:

Type d'Exception: InvalidCastException

Message d'Exception: Ne peut pas lancer de DBNull.Valeur de type 'System.Int32'. Veuillez utiliser un type nullable.

Je ne sais pas type nullable et je ne reçois pas comment utiliser le type nullable à surmonter cette exception.

Bref: par défaut, les types primitifs (comme int, double, float, ...) ne peuvent pas être attribués des valeurs null. La solution à ce problème est d'utiliser un type nullable à la place (comme int?), qui est vraiment juste un wrapper autour de la type primitif.
Semble que vous utilisez DataSet, probablement rempli par DataAdapter. Ensuite, vous pouvez remplir pas un DataSet mais un DataTable, si vous êtes sûr que la requête qui contient une seule table.
Lorsque nous avons besoin d'utiliser des types nullables? quels scénarios? pourquoi nous devons utiliser la même? Besoin d'informations sur le but et les avantages ou les Inconvénients avec des types Nullables?
Google "types nullables C#" et lire à ce sujet. Vous avez besoin d'apprendre comment faire des recherches sur vos propres problèmes plutôt que de demander aux gens de vous donner des réponses.

OriginalL'auteur venkat | 2012-01-10