IQueryable.Concat, IEnumerable.Concat, Linq GroupBy then OrderBy within each groupReturning IEnumerable<T> vs. IQueryable<T>LINQ query on a DataTableDynamic LINQ OrderBy on IEnumerable<T> / IQueryable<T>LINQ equivalent of foreach for IEnumerable<T>Multiple “order by” in LINQGroup By Multiple ColumnsWhen to use .First and when to use .FirstOrDefault with LINQ?What is the Java equivalent for LINQ?LINQ Orderby Descending QueryLINQ Aggregate algorithm explainedGroup by in LINQ
How did Arya survive the stabbing?
Failed to fetch jessie backports repository
What is the difference between "behavior" and "behaviour"?
Method to test if a number is a perfect power?
Implement the Thanos sorting algorithm
Trouble understanding the speech of overseas colleagues
Do sorcerers' Subtle Spells require a skill check to be unseen?
Integer addition + constant, is it a group?
How do we know the LHC results are robust?
What does the word "Atten" mean?
Short story about space worker geeks who zone out by 'listening' to radiation from stars
Pole-zeros of a real-valued causal FIR system
CREATE opcode: what does it really do?
Risk of infection at the gym?
How does buying out courses with grant money work?
Roman Numeral Treatment of Suspensions
India just shot down a satellite from the ground. At what altitude range is the resulting debris field?
Why Were Madagascar and New Zealand Discovered So Late?
Is a stroke of luck acceptable after a series of unfavorable events?
What happens if you roll doubles 3 times then land on "Go to jail?"
Sequence of Tenses: Translating the subjunctive
Why didn't Theresa May consult with Parliament before negotiating a deal with the EU?
Crossing the line between justified force and brutality
Why not increase contact surface when reentering the atmosphere?
IQueryable.Concat, IEnumerable.Concat, Linq GroupBy then OrderBy within each group
Returning IEnumerable<T> vs. IQueryable<T>LINQ query on a DataTableDynamic LINQ OrderBy on IEnumerable<T> / IQueryable<T>LINQ equivalent of foreach for IEnumerable<T>Multiple “order by” in LINQGroup By Multiple ColumnsWhen to use .First and when to use .FirstOrDefault with LINQ?What is the Java equivalent for LINQ?LINQ Orderby Descending QueryLINQ Aggregate algorithm explainedGroup by in LINQ
What I'm doing so far is this:
Entities:
public class BaseEntity
public int Id get; set;
public DateTime CreateOn get; set;
public class Request : BaseEntity, IAggregateRoot
public Approval Approval get; set;
public class Approval // Value object
public bool? IsApproved get; set;
Repo:
public async Task<IReadOnlyList<Request>> GetAllAsync()
IQueryable<Request> requests = await _dbContext.Requests.ToListAsync();
IQueryable<Request> pending = requests.Where(r => r.Approval.IsApproved == null).OrderBy(r => r.CreateOn);
IQueryable<Request> processed = requests.Where(r => r.Approval.IsApproved != null).OrderByDescending(r => r.CreateOn);
return pending.Concat(processed).ToListAsync();
The problem I have is when I iterate through the result of GetAllAsync
and IsApproved
has a value, Approval
is set to null
. If I only return requests
without concatenating, it works as expected (the object is created, but the values within are null
).
I suspect the problem is with concatenating two queries. How can I rewrite what I have in a single query?
The requests should be grouped by processed and not processed (IsApproved == null
and IsApproved != null
), then ordered by CreatedOn
in different orders.
Would also greatly appreciate if someone can explain to me why after concatenating, Approval
is set to null
if IsApproved
has a value. Also, when I wait enough (~5s), while debugging through each iteration, it works as expected. Maybe there's a late reference that doesn't await
for some process to finish?
While writing this post, I did some testing. If I change IQueryable
to IEnumerable
it works as expected. After some more digging, I found this:
Queryable.Concat(IQueryable, IEnumerable) Method
Enumerable.Concat(IEnumerable, IEnumerable) Method
So I assume if I pass an IQueryable
, instead of IEnumerable
, to Queryable.Concat()
, then I lose some references? I'm so confused.
c# linq .net-core ienumerable iqueryable
add a comment |
What I'm doing so far is this:
Entities:
public class BaseEntity
public int Id get; set;
public DateTime CreateOn get; set;
public class Request : BaseEntity, IAggregateRoot
public Approval Approval get; set;
public class Approval // Value object
public bool? IsApproved get; set;
Repo:
public async Task<IReadOnlyList<Request>> GetAllAsync()
IQueryable<Request> requests = await _dbContext.Requests.ToListAsync();
IQueryable<Request> pending = requests.Where(r => r.Approval.IsApproved == null).OrderBy(r => r.CreateOn);
IQueryable<Request> processed = requests.Where(r => r.Approval.IsApproved != null).OrderByDescending(r => r.CreateOn);
return pending.Concat(processed).ToListAsync();
The problem I have is when I iterate through the result of GetAllAsync
and IsApproved
has a value, Approval
is set to null
. If I only return requests
without concatenating, it works as expected (the object is created, but the values within are null
).
I suspect the problem is with concatenating two queries. How can I rewrite what I have in a single query?
The requests should be grouped by processed and not processed (IsApproved == null
and IsApproved != null
), then ordered by CreatedOn
in different orders.
Would also greatly appreciate if someone can explain to me why after concatenating, Approval
is set to null
if IsApproved
has a value. Also, when I wait enough (~5s), while debugging through each iteration, it works as expected. Maybe there's a late reference that doesn't await
for some process to finish?
While writing this post, I did some testing. If I change IQueryable
to IEnumerable
it works as expected. After some more digging, I found this:
Queryable.Concat(IQueryable, IEnumerable) Method
Enumerable.Concat(IEnumerable, IEnumerable) Method
So I assume if I pass an IQueryable
, instead of IEnumerable
, to Queryable.Concat()
, then I lose some references? I'm so confused.
c# linq .net-core ienumerable iqueryable
1
Shouldn'trequests
be of typeIList<Request>
? Thenpending
andprocessed
would beIEnumerable<Request>
and the last line would beToList()
instead ofToListAsync()
.
– ckuri
Mar 21 at 16:04
Have you tried to make yourpending
andprocessed
into a List using.ToList()
and then doingpending.Concat(processed).ToList
, to make sure there is nothing else going on
– Vikhram
Mar 21 at 16:23
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another.Where(...)
so it would be something likeWhere(...).ToList().Where(...)
.
– itVico
Mar 22 at 8:16
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23
add a comment |
What I'm doing so far is this:
Entities:
public class BaseEntity
public int Id get; set;
public DateTime CreateOn get; set;
public class Request : BaseEntity, IAggregateRoot
public Approval Approval get; set;
public class Approval // Value object
public bool? IsApproved get; set;
Repo:
public async Task<IReadOnlyList<Request>> GetAllAsync()
IQueryable<Request> requests = await _dbContext.Requests.ToListAsync();
IQueryable<Request> pending = requests.Where(r => r.Approval.IsApproved == null).OrderBy(r => r.CreateOn);
IQueryable<Request> processed = requests.Where(r => r.Approval.IsApproved != null).OrderByDescending(r => r.CreateOn);
return pending.Concat(processed).ToListAsync();
The problem I have is when I iterate through the result of GetAllAsync
and IsApproved
has a value, Approval
is set to null
. If I only return requests
without concatenating, it works as expected (the object is created, but the values within are null
).
I suspect the problem is with concatenating two queries. How can I rewrite what I have in a single query?
The requests should be grouped by processed and not processed (IsApproved == null
and IsApproved != null
), then ordered by CreatedOn
in different orders.
Would also greatly appreciate if someone can explain to me why after concatenating, Approval
is set to null
if IsApproved
has a value. Also, when I wait enough (~5s), while debugging through each iteration, it works as expected. Maybe there's a late reference that doesn't await
for some process to finish?
While writing this post, I did some testing. If I change IQueryable
to IEnumerable
it works as expected. After some more digging, I found this:
Queryable.Concat(IQueryable, IEnumerable) Method
Enumerable.Concat(IEnumerable, IEnumerable) Method
So I assume if I pass an IQueryable
, instead of IEnumerable
, to Queryable.Concat()
, then I lose some references? I'm so confused.
c# linq .net-core ienumerable iqueryable
What I'm doing so far is this:
Entities:
public class BaseEntity
public int Id get; set;
public DateTime CreateOn get; set;
public class Request : BaseEntity, IAggregateRoot
public Approval Approval get; set;
public class Approval // Value object
public bool? IsApproved get; set;
Repo:
public async Task<IReadOnlyList<Request>> GetAllAsync()
IQueryable<Request> requests = await _dbContext.Requests.ToListAsync();
IQueryable<Request> pending = requests.Where(r => r.Approval.IsApproved == null).OrderBy(r => r.CreateOn);
IQueryable<Request> processed = requests.Where(r => r.Approval.IsApproved != null).OrderByDescending(r => r.CreateOn);
return pending.Concat(processed).ToListAsync();
The problem I have is when I iterate through the result of GetAllAsync
and IsApproved
has a value, Approval
is set to null
. If I only return requests
without concatenating, it works as expected (the object is created, but the values within are null
).
I suspect the problem is with concatenating two queries. How can I rewrite what I have in a single query?
The requests should be grouped by processed and not processed (IsApproved == null
and IsApproved != null
), then ordered by CreatedOn
in different orders.
Would also greatly appreciate if someone can explain to me why after concatenating, Approval
is set to null
if IsApproved
has a value. Also, when I wait enough (~5s), while debugging through each iteration, it works as expected. Maybe there's a late reference that doesn't await
for some process to finish?
While writing this post, I did some testing. If I change IQueryable
to IEnumerable
it works as expected. After some more digging, I found this:
Queryable.Concat(IQueryable, IEnumerable) Method
Enumerable.Concat(IEnumerable, IEnumerable) Method
So I assume if I pass an IQueryable
, instead of IEnumerable
, to Queryable.Concat()
, then I lose some references? I'm so confused.
c# linq .net-core ienumerable iqueryable
c# linq .net-core ienumerable iqueryable
asked Mar 21 at 15:59
itVicoitVico
1071311
1071311
1
Shouldn'trequests
be of typeIList<Request>
? Thenpending
andprocessed
would beIEnumerable<Request>
and the last line would beToList()
instead ofToListAsync()
.
– ckuri
Mar 21 at 16:04
Have you tried to make yourpending
andprocessed
into a List using.ToList()
and then doingpending.Concat(processed).ToList
, to make sure there is nothing else going on
– Vikhram
Mar 21 at 16:23
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another.Where(...)
so it would be something likeWhere(...).ToList().Where(...)
.
– itVico
Mar 22 at 8:16
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23
add a comment |
1
Shouldn'trequests
be of typeIList<Request>
? Thenpending
andprocessed
would beIEnumerable<Request>
and the last line would beToList()
instead ofToListAsync()
.
– ckuri
Mar 21 at 16:04
Have you tried to make yourpending
andprocessed
into a List using.ToList()
and then doingpending.Concat(processed).ToList
, to make sure there is nothing else going on
– Vikhram
Mar 21 at 16:23
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another.Where(...)
so it would be something likeWhere(...).ToList().Where(...)
.
– itVico
Mar 22 at 8:16
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23
1
1
Shouldn't
requests
be of type IList<Request>
? Then pending
and processed
would be IEnumerable<Request>
and the last line would be ToList()
instead of ToListAsync()
.– ckuri
Mar 21 at 16:04
Shouldn't
requests
be of type IList<Request>
? Then pending
and processed
would be IEnumerable<Request>
and the last line would be ToList()
instead of ToListAsync()
.– ckuri
Mar 21 at 16:04
Have you tried to make your
pending
and processed
into a List using .ToList()
and then doing pending.Concat(processed).ToList
, to make sure there is nothing else going on– Vikhram
Mar 21 at 16:23
Have you tried to make your
pending
and processed
into a List using .ToList()
and then doing pending.Concat(processed).ToList
, to make sure there is nothing else going on– Vikhram
Mar 21 at 16:23
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another
.Where(...)
so it would be something like Where(...).ToList().Where(...)
.– itVico
Mar 22 at 8:16
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another
.Where(...)
so it would be something like Where(...).ToList().Where(...)
.– itVico
Mar 22 at 8:16
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23
add a comment |
0
active
oldest
votes
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%2f55284556%2fiqueryable-concat-ienumerable-concat-linq-groupby-then-orderby-within-each-gro%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f55284556%2fiqueryable-concat-ienumerable-concat-linq-groupby-then-orderby-within-each-gro%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
1
Shouldn't
requests
be of typeIList<Request>
? Thenpending
andprocessed
would beIEnumerable<Request>
and the last line would beToList()
instead ofToListAsync()
.– ckuri
Mar 21 at 16:04
Have you tried to make your
pending
andprocessed
into a List using.ToList()
and then doingpending.Concat(processed).ToList
, to make sure there is nothing else going on– Vikhram
Mar 21 at 16:23
Wouldn't that have an impact on performance? Somewhere else in the code I'm doing another
.Where(...)
so it would be something likeWhere(...).ToList().Where(...)
.– itVico
Mar 22 at 8:16
As per this answer (stackoverflow.com/a/2876655/2949081), I want to do LINQ-to-SQL.
– itVico
Mar 22 at 8:23