String Comparison exception within Entity Framework FirstOrDefault
I'm querying a table using Entity Framework. The first bit of code was what I wrote, the second bit was what ReSharper suggested I refactor it too. The first one gracefully returns null as it should if the key doesn't exist, but the second throws an exception.
This was attempted with 0-1 records in the table (all of the columns are marked as NOT NULL)
Code that works:
context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());
and code that doesn't work:
context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));
Exception thrown:
Incorrect number of arguments supplied for call to method 'Boolean
Equals(System.String, System.String, System.StringComparison)'
So my question is: what is the difference between the two expressions?
c# entity-framework string-comparison
add a comment |
I'm querying a table using Entity Framework. The first bit of code was what I wrote, the second bit was what ReSharper suggested I refactor it too. The first one gracefully returns null as it should if the key doesn't exist, but the second throws an exception.
This was attempted with 0-1 records in the table (all of the columns are marked as NOT NULL)
Code that works:
context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());
and code that doesn't work:
context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));
Exception thrown:
Incorrect number of arguments supplied for call to method 'Boolean
Equals(System.String, System.String, System.StringComparison)'
So my question is: what is the difference between the two expressions?
c# entity-framework string-comparison
add a comment |
I'm querying a table using Entity Framework. The first bit of code was what I wrote, the second bit was what ReSharper suggested I refactor it too. The first one gracefully returns null as it should if the key doesn't exist, but the second throws an exception.
This was attempted with 0-1 records in the table (all of the columns are marked as NOT NULL)
Code that works:
context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());
and code that doesn't work:
context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));
Exception thrown:
Incorrect number of arguments supplied for call to method 'Boolean
Equals(System.String, System.String, System.StringComparison)'
So my question is: what is the difference between the two expressions?
c# entity-framework string-comparison
I'm querying a table using Entity Framework. The first bit of code was what I wrote, the second bit was what ReSharper suggested I refactor it too. The first one gracefully returns null as it should if the key doesn't exist, but the second throws an exception.
This was attempted with 0-1 records in the table (all of the columns are marked as NOT NULL)
Code that works:
context.brandlink.FirstOrDefault(x => x.ManufacturerKey.ToLower() == manufacturerKey.ToLower());
and code that doesn't work:
context.brandlink.FirstOrDefault(x => String.Equals(x.ManufacturerKey, manufacturerKey, StringComparison.InvariantCultureIgnoreCase));
Exception thrown:
Incorrect number of arguments supplied for call to method 'Boolean
Equals(System.String, System.String, System.StringComparison)'
So my question is: what is the difference between the two expressions?
c# entity-framework string-comparison
c# entity-framework string-comparison
edited Mar 11 '16 at 21:39
marc_s
583k13011241270
583k13011241270
asked Mar 11 '16 at 21:14
NickNick
3422418
3422418
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
So my question is: what is the difference between the two expressions?
The diffence is that the later is using the CLR String.Equals Method (String, String, StringComparison) which is not supported by EF according to CLR Method to Canonical Function Mapping while all the methods used in the former (string.ToLower and string equality operator) are supported.
In general you cannot control the sting comparisons for EF queries from code because they are controlled by the database.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f35950018%2fstring-comparison-exception-within-entity-framework-firstordefault%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
So my question is: what is the difference between the two expressions?
The diffence is that the later is using the CLR String.Equals Method (String, String, StringComparison) which is not supported by EF according to CLR Method to Canonical Function Mapping while all the methods used in the former (string.ToLower and string equality operator) are supported.
In general you cannot control the sting comparisons for EF queries from code because they are controlled by the database.
add a comment |
So my question is: what is the difference between the two expressions?
The diffence is that the later is using the CLR String.Equals Method (String, String, StringComparison) which is not supported by EF according to CLR Method to Canonical Function Mapping while all the methods used in the former (string.ToLower and string equality operator) are supported.
In general you cannot control the sting comparisons for EF queries from code because they are controlled by the database.
add a comment |
So my question is: what is the difference between the two expressions?
The diffence is that the later is using the CLR String.Equals Method (String, String, StringComparison) which is not supported by EF according to CLR Method to Canonical Function Mapping while all the methods used in the former (string.ToLower and string equality operator) are supported.
In general you cannot control the sting comparisons for EF queries from code because they are controlled by the database.
So my question is: what is the difference between the two expressions?
The diffence is that the later is using the CLR String.Equals Method (String, String, StringComparison) which is not supported by EF according to CLR Method to Canonical Function Mapping while all the methods used in the former (string.ToLower and string equality operator) are supported.
In general you cannot control the sting comparisons for EF queries from code because they are controlled by the database.
answered Mar 11 '16 at 21:39
Ivan StoevIvan Stoev
108k786140
108k786140
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f35950018%2fstring-comparison-exception-within-entity-framework-firstordefault%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown