Solved

Best way to select specific columns in a LINQ query

Posted on 2011-09-12
8
338 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
 
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

932 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now