1. Supports new type quries , like the following

 var query = (from q in context
              orderby q.LastUpdated descending
              select new { q.Id, q.Title, q.LastUpdated }).Take(1);

2.New Support for "<", ">" , "<=", ">=" along with "=" Expression type. This are tracked by RelationType enum, and is passed with Bucket object to Process method exposed by LinqExtender, where user can take logical decision based on the Relation Type.
Typical expression

var query = from q in context
                  where q.Age < 23
                  select q;

for this, inside the bucket wrapper, passed in the Process Routine, we can retrive the value in the followng way.

int value = (int) bucket.Items["Age"].Value ;
RelationType relType = bucket.Items["Age"].RelationType;

Here , the assinged value for value and relType are 23 and RelationType.LessThan respectively.

3. Handy shortcuts for iterating elements and getting property values.
4. Added new UniqueIdentifierAttribute
6. Renamed the Class from SqlContext to SqlQuery to keep it similar with other Query class.
7. Updated Util class with some helper methods.
8. updated TinyLinqToSql provider, it now does queries with CTE(Common Table expression) for selective item retrival by Take
and skip

New updates
9. Renamed TinyLinqToSql to OpenLinqToSql.
10. Added NUnit test class. For running Nunit test class, u need to download the Nunit Gui tool, just build the project and point the test dll to it.

Patch update
11. Complex parameter support by using Delegate.DynamicInvoke.For example, we can do the following

var query = from q in _queryContext
where q.Author == _list[2].Author // complex type query parameter.
select q;

12. Query.Count added, typical example

var query = (from q in _queryContext
             orderby q.LastUpdated descending
             select new { q.Id, q.Title, q.LastUpdated }).Take(1);

int count = query.Count(); 

13. Bucket.QueryVisible , true [if, LinqVisible(true) added on a property, it can be used in a query] , false
[If, LinqVisible(false)] , LinqVisibleAttribute was previously known as UseInQueryAttribute.

14. Support for SqlServer CE , in OpenLinqToSql, possible connection settings for both Compact and full database mode.

    <section name="customDataConfig" type="OpenLinqToSql.Configuration.OpenLinqDataProviderConfiguration, OpenLinqToSql" />  </configSections>

  <customDataConfig  provider="System.Data.SqlClient "  connectionString="Data Source=database.sdf;"/>
  <!-- For SqlCe , it looks like -->
  <customDataConfig  provider="System.Data.SqlServerCe"  connectionString="Data Source=database.sdf;"/>


15. OnSuccess and OnError event handler included. This is for , people using custom provider made on Linqextender , can take the
advantage of it. For example, writing logs.

OnError is raised for any exception in Process, Add , Remove overrides.
OnSuccess is raised, after doing db.SubmitChanges(), for successful data action.

16. If any BucketItem is changed in Provider.Add, under Bucket.Items then it will reflected back to the referencing object, this is because after adding new item , sometiems it is required that we fill the identity property .
Photo photo  = new Photo();
photo.Title = "Test";
Assert.IsTrue(photo.Id == 0);
Assert.IsTrue(photo.Id > 0);

To do this

In the AddItem of our custom provider , we need to add

// add the photo to db
int phtotoId = InsertToDatabase(soemparams);

bucket.Items["id"].Value = photoId;

More on Bucket Object

-IDictionary<string, BucketItem> Items - > where string is the property name of the query object, BuckItem represents how the Property is treated and used in query.
-ItemsToTake : default null , if Take is not specified in query.
- ItemsToTake : default 0, if Skip is not specified in query.
-UniqueItems : string[], contains the name of property on which UniqueIdentifierAttribute or its derivative is used.

- Name - Different if the used With OriginalFieldNameAttribute, or less it is same as property name
- Value - value in the query , for which the property is compared.
- Unique - True , if UniqueIdentifierAttribute or its inherited type is used on Property, Here one can Use UniqueIdentifierAttribute directly on property or can any inherited like PrimaryKeyAttribute that inherites the UniqueIdent

Last edited Jan 13, 2008 at 1:53 PM by mehfuzh, version 2


No comments yet.