LINQ to Objects - ReadOnlyListBase / ReadOnlyBase

LINQ to Objects - ReadOnlyListBase / ReadOnlyBase

Old forum URL: forums.lhotka.net/forums/t/4938.aspx


barbamodder posted on Thursday, June 05, 2008

Hi group,

In my VS2008 3.5 WinForm app I have 2 classes:
'Person' which is a ReadOnlyBase
'PersonList' which is a ReadOnlyListBase

I also have a form that displays all Person(s) in the PersonList.

I want to use LINQ to query and filter the Person(s) in the PersonList.

Question: Is this possible and if so HOW?

So I want something like this:
            string LastNameFilter = TextboxLastName.Text;
            var query = (from person in PersonList where person.LastName == LastNameFilter
                         select pers);





Philip replied on Thursday, June 05, 2008

Here is an example for the Resource class in ProjectTracker application (generated by Code Complete)

//ReadOnlyListBase

namespace ProjectTrackerDemoWin

{

 

[Serializable()]

public partial class BLResourceInfoList : ReadOnlyListBase<BLResourceInfoList, BLResourceInfo>

{

#region "Factory Methods"

public static BLResourceInfoList GetBLResourceInfoList(System.String LastName)

{

return DataPortal.Fetch<BLResourceInfoList>

(new FilteredCriteria(LastName));

}

private BLResourceInfoList()

{ }

#endregion

#region "Data Access"

[Serializable()]

private class FilteredCriteria

{

private System.String _LastName = string.Empty;

 

public System.String LastName

{

get

{

return _LastName;

}

}

public FilteredCriteria(System.String LastName)

{

_LastName = LastName;

}

}

private void DataPortal_Fetch(FilteredCriteria criteria)

{

Fetch(criteria.LastName);

}

//Search by last name using LIKE type operator

public void Fetch(System.String LastName)

{

try

{

RaiseListChangedEvents = false;

using (var ctx = ContextManager<ProjectTrackerSQLDataContext>.GetManager("ProjectTrackerSQL"))

{

IEnumerable<Resource> Resources = (from record in ctx.DataContext.Resources where record.LastName.StartsWith(LastName) select record);

IsReadOnly = false;

foreach (Resource item in Resources)

{

BLResourceInfo info = new BLResourceInfo(item.Id,

item.LastName,

item.FirstName);

this.Add(info);

}

IsReadOnly = true;

}

 

RaiseListChangedEvents = true;

}

catch (Exception ex)

{

throw ex;

}

}

#endregion

}

}

//ReadOnlyClass

namespace ProjectTrackerDemoWin

{

 

[Serializable()]

public partial class BLResourceInfo : ReadOnlyBase<BLResourceInfo>

{

#region "Private Variables"

private System.Int32 _Id;

private System.String _LastName = string.Empty;

 

private System.String _FirstName = string.Empty;

 

#endregion

#region "Public Properties"

public System.Int32 Id

{

get

{

return _Id;

}

}

public System.String LastName

{

get

{

return _LastName;

}

}

public System.String FirstName

{

get

{

return _FirstName;

}

}

protected override object GetIdValue()

{

return _Id;

}

#endregion

#region "Constructors"

private BLResourceInfo()

{ }

internal BLResourceInfo(System.Int32 Id,

System.String LastName,

System.String FirstName)

{

_Id = Id;

_LastName = LastName;

_FirstName = FirstName;

}

#endregion

}

}

 

Philip

Copyright (c) Marimer LLC