I have grown very found of using LINQ in my applications. Everything with LINQ was working great until I wanted to use it with a SQL Server Compact database. I created a .sdf database with all my tables, all was well until I tried dragging objects from the server explorer to the .dbml designer. Then I hit this:
Well what now? "The selected object(s) use an unsupported data provider" - does this mean you can't even use LINQ with a compact database? No, calm your fears. It only means that the designer does not support graphically creating the dbml. LINQ supports a huge array of data sources, some of which are not supported by the designer. 

So we just get the fun of creating our object mapping at the command line! Yeah! Really, in all seriousness, it is not that bad. The following is performed with Visual Studio 2010 in Visual Basic, but should work with other languages and versions. Here are the steps:
  1. We are going to be using SqlMetal.exe to create the object map. So go to the Visual Studio Command prompt. This can be accessed by going to the Microsoft Visual Studio 2010 folder in the start menu, then Visual Studio Tools > Visual Studio Command Prompt.
  2. Now type in the command. This will be:

    SqlMetal.exe "C:\DatabasePath\theDatabase.sdf" /dbml:"C:\DatabasePath\theDatabase.dbml"

    Hit enter and execute the command. This will create the .dbml file in the specified location.
    Note: You will obviously want to substitute the file paths for your own paths, this will often be a path to the folder where the Visual Studio project is stored. 
  3. Now go back to your project in Visual Studio. Go to the Project menu and select "Add Existing Item.." (Ctrl+D). Now select the .dbml file that was just created, and add it to the project. 
  4. Your about set, you now have a class in you project that represents your database schema. However, one addition step must be performed when using LINQ with the class.

    Normally with LINQ you can just specify a new data source as follows:

Dim theData As New theDatabase

When you create a .dbml with SqlMetal it does not have the data connection saved with the .dbml like it does when you create it with the designer. So you need to supply the connection string when creating a new instance of the object:

Dim theData As New Vocabulary("Data Source=|DataDirectory|\theDatabase.sdf")

Have a great day! You should now be back up and running with LINQ.
Have you ever wondered how you could just display all of your applications settings for editing and reviewing quick and easy. Here is how:
  1. Create a windows form (or use an existing one)
  2. Add a PropertyGrid control to the form (You will probably need to go to the all controls section of the toolbox to find it.)
  3. In the form load event simply set the property grid to display the application settings. Like this - PropertyGrid1.SelectedObject = My.Settings

Your done, it is that easy. Now all the applications settings will be displayed in a grid where they can be viewed and edited.

Note: If you only want to display User scope settings and not Application scope settings, do the following:

     ' Attribute for the user-scope settings. 
     Dim userAttr As New System.Configuration.UserScopedSettingAttribute 
     Dim attrs As New 
     PropertyGrid1.BrowsableAttributes = attrs

I was recently attempting to bind a combo box to something other than a database data source. I found this snippet of code very useful for binding it to a dictionary of items. This allows more flexibility than just editing the item list, since it allows a different display and value member to be set.
Note: This method does not seem to work with a sorted dictionary.
        Dim ComboBoxSourceDictionary As New Dictionary(Of String, String)
        'add all your items here
        ComboBoxSourceDictionary.Add("aKey", "aValue")
        ComboBox1.DataSource = New _ 
                    Windows.Forms.BindingSource(ComboBoxSourceDictionary, Nothing)
        ComboBox1.DisplayMember = "Value"
        ComboBox1.ValueMember = "Key"