Hi All,
I am writing this Blog because of one reason. Many people have a question about accessing the data in Silverlight applications without LINQ, LINQ-To-SQL Or EDM (Entity Data Model).
The answer for this question is “Yes, You can!!”. So, to achieve this, there can be multiple ways. I have achieved this by my way.
So, let’s start looking at the Steps-
1) Create a Silverlight project using VS 2008/ VS 2010 and name it as “SLWithoutLINQ”. 
2) Design the Page.xaml as per your specifications. I have taken only a single button which will give a call to WCF Service method and that method will return a collection of class called “Students”.
Page.xaml-
<UserControl x:Class="SL3WithoutLINQ.Page" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="400"> 
      <Grid x:Name="LayoutRoot" Background="Black"> 
           <Button x:Name="btnShowResult" Content="Show Result" Click="btnShowResult_Click" Height="100" Width="200"/> 
      </Grid> 
</UserControl> 
3) My database description is as below-
Database Name – Sample.
Table Name – Test.
Table structure -
| Field Name | Data Type | 
| InstID | Int | 
| StudID | Int | 
| Subject | Varchar(50) | 
| Result | Varchar(50) | 
| FailedReason | Varchar(50) | 
4) Now, let’s add a class in our web site or web application with name “Students” as shown below-
public class Students 
{ 
      public int InstanceID { get; set; } 
      public int StudentID { get; set; } 
      public string Subject { get; set; } 
      public string Result { get; set; } 
      public string FailedReason { get; set; } 
} 
5) Now, let’s add a simple WCF Service by the name “FetchResults” and write a code as below(Once you add a WCF Service, you will get an Interface and a class which implements that Interface)-
Interface-
[ServiceContract] 
public interface IFetchResults 
{ 
[OperationContract] 
List<Students> FetchStudentResult(); 
} 
 
Class-
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.Data; 
using System.Data.SqlClient; 
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "FetchResults" in code, svc and config file together. 
public class FetchResults : IFetchResults 
{ 
      public List<Students> FetchStudentResult() 
      { 
          SqlConnection CN = new SqlConnection(@"Server=.\SQLExpress;Database=Sample;Integrated Security=true"); 
          SqlCommand CMD = new SqlCommand("Select * from Test",CN); 
          CN.Open(); 
          SqlDataReader DR = CMD.ExecuteReader(); 
          List<Students> result=new List<Students>(); 
          while (DR.Read()) 
          { 
               result.Add(new Students() {StudentID=int.Parse(DR[1].ToString
()),InstanceID=int.Parse(DR[0].ToString()),Subject=DR[2].ToString(),Result=DR[3].ToString
(),FailedReason=DR[4].ToString() }); 
          } 
return result; 
      } 
} 
6) Now once you finish your service code, Now the most important thing is change the Web.Config file.
So, When you add a WCF Service, it by default gives binding as wsHttpBinding. Silverlight supports only basicHttpBinding. 
So, change it as below-
<endpoint address="" binding="basicHttpBinding" contract="IFetchResults"> 
       <identity> 
             <dns value="localhost"/> 
       </identity> 
</endpoint> 
7) The method “FetchStudentResult” returns a collection of “Students” class. Now let’s move to out next step.
8) Now add a WCF Service reference to your Silverlight project. and create a proxy of a class “FetchResultsClient” as shown below-
List<StudentProxy.Students> studCollection; 
private void btnShowResult_Click(object sender, RoutedEventArgs e) 
{ 
      StudentProxy.FetchResultsClient proxy = new 
SL3WithoutLINQ.StudentProxy.FetchResultsClient(); 
      proxy.FetchStudentResultCompleted += new  
EventHandler<SL3WithoutLINQ.StudentProxy.FetchStudentResultCompletedEventArgs>
(proxy_FetchStudentResultCompleted); 
      proxy.FetchStudentResultAsync(); 
} 
void proxy_FetchStudentResultCompleted(object sender, 
SL3WithoutLINQ.StudentProxy.FetchStudentResultCompletedEventArgs e) 
{ 
      studCollection = e.Result.ToList(); 
} 
9) Now put a break point on “proxy_FetchStudentResultCompleted” method. and run your 
application. Click the button “Show Result”. and when the break point is invoked, you will 
see the no. of instances in the studCollection as shown below-
![]()
![DebugView.jpg]()
In the above result, I have six rows return from the table called “Test”. Now you can use this collection as a data context for any control !!
10) So, That’s all !! Enjoy.