simulate: “file Streams into Memory, then JOIN the data in Memory, via LINQ to Objects”
I wrote up a quick little WinForms project in VS2008 with .NET Framework 3.5,
Code overview:
1. On Form_Load,
a. create a List of People into DataDridView and in Memory
b. create a List of Jobs into DataDridView and in Memory
c. create a List of JobIds into ComboBox
2. On ComboBox_SelectedIndexChanged,
a. Perform LINQ to Objects query: “Select from People JOINED to Jobs by JobId”
b. Show query result in list box
You can probably do this with nHibernate too.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FascetLINQtoObjects
{
publicpartialclassForm1 : Form
{
public Form1()
{
InitializeComponent();
}
//-----------------------------------------------------
//Form Scope (To hold & share LINQ Objects' state) -
//-----------------------------------------------------
List<Person> people = newList<Person>();
List<Job> jobs = newList<Job>();
bool _loaded = false;
privatevoid Form1_Load(object sender, EventArgs e)
{
//-----------------------------------------------------
//Form Load Load LINQ Objects' state
//Simulate Fascet Client data streaming into Fascet Winform
//-----------------------------------------------------
people.Add(newPerson("Gerald", DateTime.Parse("1/2/2003"), 3));
people.Add(newPerson("Linda", DateTime.Parse("2/2/2002"), 1));
people.Add(newPerson("Sarah", DateTime.Parse("4/2/2002"), 1));
people.Add(newPerson("Bill", DateTime.Parse("4/5/2006"), 2));
jobs.Add(newJob(1, "Developer", "Microsoft", "West"));
jobs.Add(newJob(2, "Developer", "Microsoft", "East"));
jobs.Add(newJob(3, "Technical Account Representative", "Microsoft", "Central"));
//-----------------------------------------------------
//Bind to Jobs DataGridView
//-----------------------------------------------------
dgPeople.DataSource = people;
this.dgJobs.DataSource = jobs;
//-----------------------------------------------------
//Bind to Jobs comboBox
//-----------------------------------------------------
this.cboJob.DataSource = jobs;
this.cboJob.ValueMember = "ID";
this.cboJob.DisplayMember = "ID";
//-----------------------------------------------------
//ShowPersonJob
//-----------------------------------------------------
int jobId = int.Parse(cboJob.SelectedValue.ToString());
ShowPersonJob(jobId);
_loaded = true;
}
privatevoid ShowPersonJob(int jobId)
{
//-----------------------------------------------------
//query joined LINQ objects
//-----------------------------------------------------
var result = from p in people
from j in jobs
where p.JobID == j.ID
&& j.ID == jobId
selectnew
{
p.Name,
j.Company,
j.Title
};
//-----------------------------------------------------
//display query result
//-----------------------------------------------------
this.listBox1.DataSource = result.ToList();
}
privatevoid cboJob_SelectedIndexChanged(object sender, EventArgs e)
{
//-----------------------------------------------------
//ShowPersonJob
//-----------------------------------------------------
if (_loaded)
{
//-----------------------------------------------------
//
//-----------------------------------------------------
int jobId = int.Parse(cboJob.SelectedValue.ToString());
ShowPersonJob(jobId);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FascetLINQtoObjects
{
classPerson
{
string _name = "";
publicstring Name
{
get { return _name; }
set { _name = value; }
}
DateTime? _Birthday;
publicDateTime? Birthday
{
get { return _Birthday; }
set { _Birthday = value; }
}
int _jobID = 0;
publicint JobID
{
get { return _jobID; }
set { _jobID = value; }
}
public Person(string name, DateTime birthday, int jobID)
{
this._name = name;
this._Birthday = birthday;
this._jobID = jobID;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FascetLINQtoObjects
{
classJob
{
string _title = "";
publicstring Title
{
get { return _title; }
set { _title = value; }
}
string _company = "";
publicstring Company
{
get { return _company; }
set { _company = value; }
}
int _id = 0;
publicint ID
{
get { return _id; }
set { _id = value; }
}
string _location = "";
publicstring Location
{
get { return _location; }
set { _location = value; }
}
public Job(int id, string title, string company, string location)
{
_title = title;
_id = id;
_company = company;
_location = location;
}
}
}