IntelliSense Fosters Inattention
I count on IntelliSense a lot when programming - especially in C# which (arrggh!) is case-sensitive. However, I just had a case where IntelliSense led me to make a mistake that cost me half an hour.
I was happily working in LINQ and had the following code:
protected void LinqDataSource1_Deleting (object sender, LinqDataSourceDeleteEventArgs e) { NWDataClassesDataContext dc = new NWDataClassesDataContext(); Product prod; prod = (Product)e.OriginalObject; var q = from o in dc.Order_Details where o.ProductID == prod.ProductID select o; foreach (Order_Detail od in q) { dc.Order_Details.DeleteAllOnSubmit(od); // fails! } dc.SubmitChanges(); }
There was an error in the foreach loop:
The type arguments for method 'System.Data.Linq.Table<Order_Detail>.DeleteAllOnSubmit<TSubEntity>(System.Collections.Generic.IEnumerable<TSubEntity>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
After going in circles (and unsuccessfully searching the error message), I finally understood what the error was telling me: I had blithely accepted the DeleteAllOnSubmit() method which came first in the alphabetical list of members. The method that I really wanted was the next item in the IntelliSense listbox, DeleteOnSubmit() as shown here:
protected void LinqDataSource1_Deleting (object sender, LinqDataSourceDeleteEventArgs e) { NWDataClassesDataContext dc = new NWDataClassesDataContext(); Product prod; prod = (Product)e.OriginalObject; var q = from o in dc.Order_Details where o.ProductID == prod.ProductID select o; foreach (Order_Detail od in q) { dc.Order_Details.DeleteOnSubmit(od); } dc.SubmitChanges(); }
I probably wouldn't have goofed up if forced to type the method name rather than hitting Tab to select something from IntelliSense.
Hmmm. Perhaps I shouldn't admit that I lose time on silly mistakes like this? Oh well. My hope is that someone else will find this blog entry while searching the error message and profit from my inattention.