Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Best way to select specific columns in a LINQ query

Posted on 2011-09-12
8
341 Views
Last Modified: 2012-05-12

Being new to LINQ - In the code below how to select specific columns?

DataTable ResultView = LookUp(); //datatable has 3 columns

var query = (from lookup in ResultView.AsEnumerable()
            where lookup[2].ToString() == "cond" //this works
                select lookup[0], lookup[1] //??? Need only the first two columns
            );
0
Comment
Question by:olmuser
  • 5
  • 3
8 Comments
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36526672
You would want to use the new keyword. You can pick an arbitrary name for each column:
var query = from lookup in ResultView.AsEnumerable()
            where lookup[2].ToString() == "cond" //this works
            select new
            {
                FirstColumn = lookup[0],
                SecondColumn = lookup[1] //??? Need only the first two columns
            };

// Use like this:
foreach (var item in query)
{
    Console.WriteLine(item.FirstColumn.ToString());
    Console.WriteLine(item.SecondColumn.ToString());
}

Open in new window

0
 
LVL 1

Author Comment

by:olmuser
ID: 36526770
Oh I forgot to mention, so here are the additional details and I am adding extra points.

I need to get the first two columns and as many rows as there are to a datatable. Is there a way to do that without using foreach in one single step...
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36526783
Is there a way to do that without using foreach in one single step...
What is it you want to do with the data? Remember, declaring the query itself (lines 1 to 7 in my last post) don't actually execute the query; the query is executed, in my example, in the foreach line. You can return a list of these columns if you like (negating the use of a foreach):

var items = query.ToList();

Open in new window

0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 1

Author Comment

by:olmuser
ID: 36526855
I would like to store the resulting dataset in another datatable array

I would like to be able to return viewschemas[index] which is a Datatable.

I think I could do this now by(contd from above in pseudo code) :

Datatable x = new Datatable();
foreach(var item in query)
{
   x.addrow(query.datarow);
}

viewSchema[indx] = x;
return viewSchema[index];

It may look twisted but I am trying to use existing code as part of maintenance.
0
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 250 total points
ID: 36527137
Well, I've managed to track down a method of doing what you seek via Linq; however, it would necessitate adding a bit of code. If you take the code from #1 and #2 at the following:

    http://msdn.microsoft.com/en-us/library/bb669096(v=VS.90).aspx

you can subsequently do something like this:

var query = from lookup in ResultView.AsEnumerable()
            where lookup[2].ToString() == "cond" //this works
            select new
            {
                Column1 = lookup[0],
                Column2 = lookup[1]
            };

DataTable x = query.CopyToDataTable();

Open in new window

0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36527140
P.S.

The following using statements are required for the code at that link:

using System;
using System.Data;
using System.Collections.Generic;
using System.Reflection;

Open in new window

0
 
LVL 1

Author Comment

by:olmuser
ID: 36531298
@Kaufmed, did you try to compile the code?

Or is it meant to be pseudocode?
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36531350
did you try to compile the code?
Did you add the code that I referred to in the link? The code I posted is not the entire solution--you need the code from the link as well. Just #1 and #2, though.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question