score:18
var tables = dbServer.Tables
.Where(t => !t.IsSet)
.SelectMany(t => t.References)
.Where(r => r.PrimaryTable == "myTable")
.ToList();
Assuming tables is a List<T>
EDIT: As the comment points out, this isn't the same as the original - it looks like what you actually want is this:
var tables = dbServer.Tables
.Where(t => !t.IsSet && t.References.Any(r => r.PrimaryTable == "myTable"))
.ToList();
This will give you all the tables which have a reference whose PrimaryTable is 'myTable' which assumes that there will only be one matching reference table. Otherwise you could have the same table added multiple times.
score:3
tables.AddRange(dbServer.Tables
.Where(t => !t.IsSet)
.SelectMany(t => table.References)
.Where(r => r.PrimaryTable == "myTable"));
score:5
Just need to use two from's
var q = from table in dbServer.Tables
where !table.IsSet
from refer in table.References
where refer.PrimaryTable == "myTable"
select table;
score:4
EDIT
Actually, I'm a bit confused by this code. Are you sure it's doing what it's meant to do? In particular, what's throwing me off is the fact that you're enumerating over table.References
, but then, when a certain condition holds for a particular Reference
(i.e., refer.PrimaryTable == "myTable"
), you're adding the Table
(table
) instead of the Reference
(refer
).
What this means is that if a Table
has multiple Reference
objects with PrimaryTable == "myTable"
, your tables
collection might contain multiple copies of this Table
. Is this correct?
I'm going to go out on a limb and guess that what you really want to check is simply that a Table
has, in its References
collection, any Reference
object with PrimaryTable == "myTable"
. If that's the case, in your original code after tables.Add(table)
I would have simply added break
to avoid duplicates. (It may be that only one Reference
in each collection would ever have the same PrimaryTable
, which case you'd be fine; but you could still stop enumerating at this point. Unless of course you want the duplicates.)
In any case, Lee's code (and what I have below) is not duplicating this behavior. Rather, it's adding the Reference
objects to a list (because the final ToList
call is on an IEnumerable<Reference>
).
It seems like, if what I've described above is the behavior you're after, you might want to do this:
var tables = dbServer.Tables
.Where(table => !table.IsSet)
.Where(
table => table.References.Any(refer => refer.PrimaryTable == "myTable")
).ToList();
ORIGINAL ANSWER
I'm going to expand on Lee's answer. Let's analyze it line by line.
// 1. enumerating over a collection
foreach (Table table in dbServer.Tables)
{
// 2. checking a condition
if (!table.IsSet)
{
// 3. enumerating over another collection
foreach (Reference refer in table.References)
{
// 4. checking a condition
if (refer.PrimaryTable == "myTable")
{
// 5. adding to a collection
tables.Add(table);
}
}
}
}
OK. So we've got:
- Enumeration - simple -- that's where we start
- Condition checking - we'll need a
Where
- Enumeration over another collection -
SelectMany
- Condition checking -
Where
again - Adding - most likely
ToList
(depends on what type of collection you want)
Here's what it comes out to:
var tables = dbServer.Tables // step 1
.Where(table => !table.IsSet) // step 2
.SelectMany(table => table.References) // step 3
.Where(refer => refer.PrimaryTable == "myTable") // step 4
.ToList(); // step 5
Make sense?
Source: stackoverflow.com
Related Articles
- How to convert this foreach loop into Linq code?
- I want to convert this foreach loop to a LINQ statement
- convert foreach loop to linq code
- Convert this LINQ code back to a Loop (or Why is this object sometimes null)
- Can I can convert this C# code into some Linq code?
- C# LINQ Find List Inside Another List, Better way to code this than a foreach loop
- Convert the code from Foreach loop to Linq
- How do I convert this loop into a LINQ expression?
- Can I convert Dictionary loop inside of a foreach loop into a LINQ statement
- How can i convert this code snippet into LINQ format?
- Convert Foreach Loop into Linq in C#
- How to convert the following foreach loop to linq code format?
- How to combine this foreach loop into a one line lambda / linq
- How to convert foreach loop with a switch statement into LINQ
- Why does ReSharper suggest I convert a for loop into a LINQ expression?
- convert this LINQ expression into Lambda
- How do I convert Foreach statement into linq expression?
- How can I convert this SQL Query into LINQ (OVER (PARTITION BY Date))
- How can I combine this code into one or two LINQ queries?
- Is it possible to convert foreach operation into LINQ if it does two things?
- How do I convert this double foreach loop to just lambdas?
- Convert simple ForEach into a Linq statement
- How to convert foreach loop to a Linq query?
- Convert a for loop nested in a ForEach loop to LINQ
- Can you convert this Linq statement into Lambda without using join statements?
- How to convert Foreach loop to Linq (in datagridview)
- How do i convert this linq code to inline sql
- convert foreach loop to linq
- Can I use linq to achieve the same thing this foreach loop does?
- Convert a foreach loop to LINQ
- Display Parent Values if Specified Child Values are NULL
- can't select into class using linq
- How to convert an expression to linq with nested foreach when the first element is being modified
- C# LINQ .Any not working on DocumentDb CreateDocumentQuery
- how to get the value member of a selected comboBox to use it to add a new object with linq
- Using Linq comparision with previous record
- Select from table using model properties that is not null
- combobox with multiple variables in one line, saving selection
- c# xml linq add element to an element
- Using LINQ to get a diff between a list and insert it back in between?
- Linq, select List Item where column is the max value
- How to group LINQ query to dictionary<string, string>
- DefaultIfEmpty() doesn't work
- How to log a predicate Expression?
- How to group by only 2 rows of a column?
- Entity Framework 6 loading child objects after other database call
- How to implement custom LINQ Provider for decorator?
- EF Linq - how to select children in same query?
- How to resolve "String was not recognized as a valid DateTime"?
- Using LINQ Query