<!-- 
RSS generated by JIRA (9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66) at Wed Feb 07 21:48:29 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>MongoDB Jira</title>
    <link>https://jira.mongodb.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.7.1</version>
        <build-number>970001</build-number>
        <build-date>13-04-2023</build-date>
    </build-info>


<item>
            <title>[CSHARP-4524] Handle projections using constructors for classes that use public fields instead of public properties</title>
                <link>https://jira.mongodb.org/browse/CSHARP-4524</link>
                <project id="10041" key="CSHARP">C# Driver</project>
                    <description>&lt;h4&gt;&lt;a name=&quot;Summary&quot;&gt;&lt;/a&gt;Summary&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Projections invoking non-default constructors with parameters passed into them no longer work as of 2.19.0 with the LINQ3 provider unless the constructor&apos;s parameters match the names of the properties being pulled from the database. This used to work on LINQ3 all the way until 2.18.0, so it&apos;s a regression.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;span class=&quot;nobr&quot;&gt;&lt;a href=&quot;https://jira.mongodb.org/secure/attachment/431571/431571_MongoProjectionRegression.cs&quot; title=&quot;MongoProjectionRegression.cs attached to CSHARP-4524&quot;&gt;MongoProjectionRegression.cs&lt;sup&gt;&lt;img class=&quot;rendericon&quot; src=&quot;https://jira.mongodb.org/images/icons/link_attachment_7.gif&quot; height=&quot;7&quot; width=&quot;7&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/sup&gt;&lt;/a&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;HowtoReproduce&quot;&gt;&lt;/a&gt;How to Reproduce&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Connect the provided repro to a test Mongo instance and run. It works on 2.18.0 with LINQ3, but not on 2.19.0 with LINQ3.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;As a control, it works on LINQ2 on both versions.&lt;/em&gt;&lt;/p&gt;</description>
                <environment></environment>
        <key id="2263210">CSHARP-4524</key>
            <summary>Handle projections using constructors for classes that use public fields instead of public properties</summary>
                <type id="1" iconUrl="https://jira.mongodb.org/secure/viewavatar?size=xsmall&amp;avatarId=14703&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.mongodb.org/images/icons/priorities/major.svg">Major - P3</priority>
                        <status id="6" iconUrl="https://jira.mongodb.org/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="13201">Fixed</resolution>
                                        <assignee username="robert@mongodb.com">Robert Stam</assignee>
                                    <reporter username="alkis@fortunefish.co.uk">Alkis Tsapanidis</reporter>
                        <labels>
                            <label>Bug</label>
                    </labels>
                <created>Mon, 13 Feb 2023 16:52:53 +0000</created>
                <updated>Sat, 28 Oct 2023 11:46:57 +0000</updated>
                            <resolved>Tue, 28 Feb 2023 01:58:34 +0000</resolved>
                                    <version>2.19.0</version>
                                    <fixVersion>2.19.1</fixVersion>
                                                        <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="5299667" author="xgen-internal-githook" created="Fri, 24 Mar 2023 19:00:06 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;rstam&apos;, &apos;email&apos;: &apos;robert@robertstam.org&apos;, &apos;username&apos;: &apos;rstam&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-4524&quot; title=&quot;Handle projections using constructors for classes that use public fields instead of public properties&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-4524&quot;&gt;&lt;del&gt;CSHARP-4524&lt;/del&gt;&lt;/a&gt;: Handle projections using constructors for classes that use public fields instead of public properties.&lt;br/&gt;
Branch: v2.19.x&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/commit/fa6ec4a822668236bea5f9da69ce0b37d8018a73&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/commit/fa6ec4a822668236bea5f9da69ce0b37d8018a73&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5235059" author="xgen-internal-githook" created="Tue, 28 Feb 2023 01:58:04 +0000"  >&lt;p&gt;Author: &lt;/p&gt;
{&apos;name&apos;: &apos;rstam&apos;, &apos;email&apos;: &apos;robert@robertstam.org&apos;, &apos;username&apos;: &apos;rstam&apos;}
&lt;p&gt;Message: &lt;a href=&quot;https://jira.mongodb.org/browse/CSHARP-4524&quot; title=&quot;Handle projections using constructors for classes that use public fields instead of public properties&quot; class=&quot;issue-link&quot; data-issue-key=&quot;CSHARP-4524&quot;&gt;&lt;del&gt;CSHARP-4524&lt;/del&gt;&lt;/a&gt;: Handle projections using constructors for classes that use public fields instead of public properties.&lt;br/&gt;
Branch: master&lt;br/&gt;
&lt;a href=&quot;https://github.com/mongodb/mongo-csharp-driver/commit/7eb0efff77c7819ee2d34fa6ee647acc69213f4c&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/mongodb/mongo-csharp-driver/commit/7eb0efff77c7819ee2d34fa6ee647acc69213f4c&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="5195252" author="rstam" created="Tue, 14 Feb 2023 00:19:01 +0000"  >&lt;p&gt;Thanks for reporting this issue.&lt;/p&gt;

&lt;p&gt;Note that LINQ2 would sometimes split a projection into two parts: the first executed on the server and the second on the client. LINQ3 no longer does that because we consider that to have been a bad idea as it hides potential performance issues. If you want to execute part of your projection client side you should do so explicitly.&lt;/p&gt;

&lt;p&gt;However, as of server version 4.4 the server now supports the same projections in Find as in the aggregate $project stage, so Find can still use many projections as long as they can be translated to a $project projection.&lt;/p&gt;

&lt;p&gt;In your case the projection is simple enough that it could be translated to a $project projection, but the LINQ3 code that does that neglected to handle classes with public fields instead of public properties.&lt;/p&gt;

&lt;p&gt;I have implemented a fix that allows your sample to run using LINQ3, as long as you are using server 4.4 or newer.&lt;/p&gt;</comment>
                            <comment id="5193779" author="JIRAUSER1258503" created="Mon, 13 Feb 2023 16:58:35 +0000"  >&lt;p&gt;The only workaround I have found is to project to some anonymous type and then construct my own type from it afterwards, which is not really acceptable either in terms of the boilerplate produced, nor performance (extra allocations every time).&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                        <issuelink>
            <issuekey id="2271536">CSHARP-4542</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10012">
                    <name>Related</name>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="2276569">CSHARP-4550</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="431571" name="MongoProjectionRegression.cs" size="1739" author="alkis@fortunefish.co.uk" created="Mon, 13 Feb 2023 16:51:52 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Backwards Compatibility</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10038"><![CDATA[Fully Compatible]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_15850" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10257" key="com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons">
                        <customfieldname>Documentation Changes</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="11861"><![CDATA[Not Needed]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14266" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
                        <customfieldname>Documentation Changes Summary</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>&lt;p&gt;1.  What would you like to communicate to the user about this feature?&lt;br/&gt;
2.  Would you like the user to see examples of the syntax and/or executable code and its output?&lt;br/&gt;
3.  Which versions of the driver/connector does this apply to?&lt;/p&gt;</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_12550" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2|i1e7nk:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10558" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </customfields>
    </item>
</channel>
</rss>