Anonymous Types - syntax needed
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Hi Team,
I am just starting out on my quest to prepare suitable materials on LINQ for the Cologne Conference on xBase in April. I am using as a base a huge amount of good stuff I did way back using C#.
I have made my first successful steps in VS 2015 with the latest XSharp compiler, and now wish to go further.
I need to be able to specify and use anonymous types as shown in the C# code in the attachments - PLEASE help me move forward.
Its the 'new { .... }' stuff that I need help with.
Best Regards,
Phil.
I am just starting out on my quest to prepare suitable materials on LINQ for the Cologne Conference on xBase in April. I am using as a base a huge amount of good stuff I did way back using C#.
I have made my first successful steps in VS 2015 with the latest XSharp compiler, and now wish to go further.
I need to be able to specify and use anonymous types as shown in the C# code in the attachments - PLEASE help me move forward.
Its the 'new { .... }' stuff that I need help with.
Best Regards,
Phil.
- Attachments
-
- FFhelpSyntax_01.jpg (22 KiB) Viewed 825 times
-
- FFhelpSyntax_02.jpg (29.23 KiB) Viewed 825 times
Anonymous Types - syntax needed
Phil,
Our syntax for an anonymous type is:
and in combination with LINQ:
I know our documentation is far from ready, but this is listed in the "New Features" branch in the TOC.
Robert
Our syntax for an anonymous type is:
Code: Select all
VAR o := CLASS { Name := "test", Value := "something" }
Code: Select all
VAR result := from c in db.Customers where c.Orders.Count > 0 ;
select CLASS{ ID := C.CustomerID, Name := C.CustomerName, OrderCount := C.Orders.Count}
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Thanks a bunch Robert,
I knew you would put me straight ;-0) My post was NOT a complaint of any sort.
I am a little (a lot?) 'rusty' after 6 months 'off' and so I may well have missed something somewhere - sorry !
I will give this a go with what I have done so far today. Things are coming on nicely.
Fingers Crossed,
Phil.
I knew you would put me straight ;-0) My post was NOT a complaint of any sort.
I am a little (a lot?) 'rusty' after 6 months 'off' and so I may well have missed something somewhere - sorry !
I will give this a go with what I have done so far today. Things are coming on nicely.
Fingers Crossed,
Phil.
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Robert,
Just a quick post to celebrate my success with your suggested syntax ;-0) Most appreciated.
For any guys trying LINQ for themselves at the moment (before Cologne 2017) I will keep posting new stuff as I get more success.
There is only any point in using LINQ if we can use a wide range of query syntaxes and formats. It took me a long time and a lot of effort to crack the C# stuff, so there is still a way to go for me (and you).
Surprisingly, the eBook available at the time were not very good, confused, incomplete, and di not use the syntax recommended by Microsoft - they say to use lambda expressions only when the 'simple' syntax is not available for use. So this is what I did.
Watch this space.
Kindest regards,
Phil.
Just a quick post to celebrate my success with your suggested syntax ;-0) Most appreciated.
For any guys trying LINQ for themselves at the moment (before Cologne 2017) I will keep posting new stuff as I get more success.
There is only any point in using LINQ if we can use a wide range of query syntaxes and formats. It took me a long time and a lot of effort to crack the C# stuff, so there is still a way to go for me (and you).
Surprisingly, the eBook available at the time were not very good, confused, incomplete, and di not use the syntax recommended by Microsoft - they say to use lambda expressions only when the 'simple' syntax is not available for use. So this is what I did.
Watch this space.
Kindest regards,
Phil.
- Attachments
-
- FFhelpSyntax_06.jpg (15.01 KiB) Viewed 825 times
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Hi Robert,
I have Anonymous Types (ATs) working as you indicated in the syntax you posted (thanks), however, it looks to me as if C# has one format of ATs which allows the programmer to leave out the name of the property, and the compiler then just uses the same property name as the item being chosen. This is extremely useful (handy) and without it there are lots of example which will be difficult to convert to X#.
I am including a few working samples from my 'Click Start' eNotes of August 2012 - yes, as long ago as over four years.
Check out lines 190, 2620, and 97.
Please can you help me ?
Regards,
Phil.
I have Anonymous Types (ATs) working as you indicated in the syntax you posted (thanks), however, it looks to me as if C# has one format of ATs which allows the programmer to leave out the name of the property, and the compiler then just uses the same property name as the item being chosen. This is extremely useful (handy) and without it there are lots of example which will be difficult to convert to X#.
I am including a few working samples from my 'Click Start' eNotes of August 2012 - yes, as long ago as over four years.
Check out lines 190, 2620, and 97.
Please can you help me ?
Regards,
Phil.
- Attachments
-
- AnonTypes_18.jpg (57.05 KiB) Viewed 825 times
-
- AnonTypes_19.jpg (16.59 KiB) Viewed 825 times
-
- AnonTypes_17.jpg (29.68 KiB) Viewed 825 times
Anonymous Types - syntax needed
Phil,
In the current build we only support anonymous types that have a Name := Value syntax ( we had totally forgotten about the other syntax).
I have just made a change to the compiler to also support the unnamed syntax.
The following code compiles and runs fine on my development machine.
As you can see I am no longer providing a name for the LastName property.
In the current build we only support anonymous types that have a Name := Value syntax ( we had totally forgotten about the other syntax).
I have just made a change to the compiler to also support the unnamed syntax.
The following code compiles and runs fine on my development machine.
As you can see I am no longer providing a name for the LastName property.
Code: Select all
FUNCTION Start AS VOID
VAR oPhil := Phil{}
VAR oSon := CLASS{ FirstName:="Bob", oPhil:LastName, Age:=42}
? oSon:FirstName, oSon:LastName, oSon:Age
Console.Read()
CLASS Phil
PROPERTY FirstName AS STRING AUTO
PROPERTY LastName AS STRING AUTO
CONSTRUCTOR()
FirstName := "Phil"
LastName := "HepBurn"
END CLASS
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Well done 'indeed' Robert ;-0)
That's what I call "responsive".
This is a great addition to ATs. When you have a version of the X# compiler suitable for a standard guy like me to try out, then I will see if all my stuff works against the new addition(s).
As a matter of interest to me, working on the session material for April (if accepted by Michael and Meinhard), am I correct in assuming that Intellisence for LINQ is not yet available to us - neither in VS nor XIDE. I have had a lot to check-out over the last couple of days and have not yet tried XIDE to see what it can do with LINQ intellisense.
Yes, we can live and work without Intellisense - BUT - it would be nice to have sometime, possibly before the April conference.
Best regards,
Phil.
That's what I call "responsive".
This is a great addition to ATs. When you have a version of the X# compiler suitable for a standard guy like me to try out, then I will see if all my stuff works against the new addition(s).
As a matter of interest to me, working on the session material for April (if accepted by Michael and Meinhard), am I correct in assuming that Intellisence for LINQ is not yet available to us - neither in VS nor XIDE. I have had a lot to check-out over the last couple of days and have not yet tried XIDE to see what it can do with LINQ intellisense.
Yes, we can live and work without Intellisense - BUT - it would be nice to have sometime, possibly before the April conference.
Best regards,
Phil.
Anonymous Types - syntax needed
Phil,
Intellisense for AT is on the list.
I think it will be there once we get the intellisense based on the Roslyn intellisense engine up and running.
I can't say when that will happen, but April sounds doable. Probably before that.
Robert
Intellisense for AT is on the list.
I think it will be there once we get the intellisense based on the Roslyn intellisense engine up and running.
I can't say when that will happen, but April sounds doable. Probably before that.
Robert
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu
- Phil Hepburn
- Posts: 743
- Joined: Sun Sep 11, 2016 2:16 pm
Anonymous Types - syntax needed
Hi again Robert (and Team),
I have had some good success with my XSharp LINQ coding, and session material preparation, since we last posted. Even doing a few things in X# I never got around to in C# some years back, so I must be making good progress.
However, I do need some help with syntax on accessing anonymous types (ATs) once I have wrapped them into Object 'Lists' for ease of movement from method to method, and data binding as well.
The attached details are from a simple WPF app which has hard coded data items - using a simple business class called 'Person' - I would like to "un-wrap" the collection items from Objects in a List to the original AT (or similar) so that I can access the properties therein.
Please can you help me and give me some advice - this is not the stuff which is my experience, or knowledge .... HELP !!!
Cheers,
Phil. P.S. please inform me if you need any more information on what I am trying to do.
I have had some good success with my XSharp LINQ coding, and session material preparation, since we last posted. Even doing a few things in X# I never got around to in C# some years back, so I must be making good progress.
However, I do need some help with syntax on accessing anonymous types (ATs) once I have wrapped them into Object 'Lists' for ease of movement from method to method, and data binding as well.
The attached details are from a simple WPF app which has hard coded data items - using a simple business class called 'Person' - I would like to "un-wrap" the collection items from Objects in a List to the original AT (or similar) so that I can access the properties therein.
Please can you help me and give me some advice - this is not the stuff which is my experience, or knowledge .... HELP !!!
Cheers,
Phil. P.S. please inform me if you need any more information on what I am trying to do.
Anonymous Types - syntax needed
Phil,
I am not sure if you what you want is even possible in C#. Try the following example:
The output is:
You can see that the compiler generates a type with 2 strings. Its name is determined by the (Roslyn) compiler.
If you move this to an object list then the only thing that you know is that there are 2 properties: FirstName and LastName
The only thing that I have seen in other peoples codes is not to store the AT in a List of objects, but in a list of Dynamics:
Add the following to the example code above (and add using System.Collections.Generic to the top)
Robert
I am not sure if you what you want is even possible in C#. Try the following example:
Code: Select all
FUNCTION Start AS VOID
VAR o := CLASS{FirstName := "Phil", LastName := "Hepburn"}
? o
? o:GetType()
Console.Read()
Code: Select all
{ FirstName = Phil, LastName = Hepburn }
<>f__AnonymousType0`2[System.String,System.String]
If you move this to an object list then the only thing that you know is that there are 2 properties: FirstName and LastName
The only thing that I have seen in other peoples codes is not to store the AT in a List of objects, but in a list of Dynamics:
Add the following to the example code above (and add using System.Collections.Generic to the top)
Code: Select all
VAR list := List<DYNAMIC>{}
list:Add(o)
FOREACH VAR element IN list
? element:FirstName, element:LastName
NEXT
Console.Read()
XSharp Development Team
The Netherlands
robert@xsharp.eu
The Netherlands
robert@xsharp.eu