Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Question
Tuesday, August 29, 2017 1:23 PM
Hi,
I want to find the columns from my table based on my input string.
for example,
my table as below.
Lesson1 x SUB A | Lesson1 x SUB B | Lesson1 x SUB C |
400 | 500 | 600 |
string Findcolumns = "Lesson x SUB A"
So, First i want to find the columns of "Lesson x SUB A" and the get the values of that..
My Result is = 400..
How to write LINQ Query or C# code..?
All replies (6)
Wednesday, August 30, 2017 9:07 AM âś…Answered
Hi gani7787,
I make a modify of my previous reply through your needs, please check:
Sample Code:
DataTable table = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
table.Columns.Add("Lesson1 x SUB A");
table.Columns.Add("Lesson1 x SUB B");
table.Columns.Add("Lesson1 x SUB C");
table.Columns.Add("UNIT");
table.Rows.Add(400, 500, 600, 205);
table.Rows.Add(300, 400, 500, 300);
table.Rows.Add(500, 600, 700, 400);
}
protected void Button1_Click(object sender, EventArgs e)
{
string columnvalue = TextBox1.Text;
var query = from r in table.AsEnumerable()
where r.Field<string>("UNIT") == "300"
let objectArray = new object[]
{r.Field<string>("Lesson1 x SUB A"),
r.Field<string>("Lesson1 x SUB B"),
r.Field<string>("Lesson1 x SUB C"),
r.Field<string>("UNIT")
}
select objectArray;
DataTable newDataTable = new DataTable();
newDataTable.Columns.Add("Lesson1 x SUB A");
newDataTable.Columns.Add("Lesson1 x SUB B");
newDataTable.Columns.Add("Lesson1 x SUB C");
newDataTable.Columns.Add("UNIT");
foreach (var array in query)
{
newDataTable.Rows.Add(array);
}
for (int i = 0; i < newDataTable.Rows.Count; i++)
{
Response.Write("Lesson1 x SUB A: " + newDataTable.Rows[i][0].ToString() + "Lesson1 x SUB B: " + newDataTable.Rows[i][1].ToString() + "Lesson1 x SUB C: " + newDataTable.Rows[i][2].ToString() + "UNIT: " + newDataTable.Rows[i][3].ToString() + "</br>");
}
}
Best Regards,
Eric Du
Tuesday, August 29, 2017 2:31 PM
Execute SQL using Linq. That allows you to format the SQL anyway you like.
/en-us/dotnet/framework/data/adonet/sql/linq/how-to-directly-execute-sql-queries
The syntax might look like this using string interpolation.
IEnumerable<MyObject> results = db.ExecuteQuery<MyObject>
($"SELECT {columnA}, {columnB}, {columnC}
FROM MyTable
WHERE {columnA} = {somevar}"
);
/en-us/dotnet/csharp/language-reference/keywords/interpolated-strings
Wednesday, August 30, 2017 1:27 AM
What sort of table? An sql table or a DataTable (or maybe a GridView or some other table like object)? Can you show your data types?
In your example the Findcolumns string does not match any of the sample data you have given. Why should the result be 400?
Wednesday, August 30, 2017 5:52 AM
DataTable table = new DataTable();
table.Columns.Add("Lesson1 x SUB A");
table.Columns.Add("Lesson1 x SUB B");
table.Columns.Add("Lesson1 x SUB C");
table.Rows.Add(400,500,600);
table.Rows.Add(300, 400, 500);
table.Rows.Add(500, 600, 700);
string Findcolumns = "Lesson1 x SUB A";
Below is the simple Query.
string result=table.Rows[0][Findcolumns].ToString();
But, how to give where condition in the query.
because, i have "n" number of rows and i want to filter based on the conditions..
for example,
DataTable table = new DataTable();
table.Columns.Add("Lesson1 x SUB A");
table.Columns.Add("Lesson1 x SUB B");
table.Columns.Add("Lesson1 x SUB C");
table.Columns.Add("UNIT");
table.Rows.Add(400,500,600,205);
table.Rows.Add(300, 400, 500,300);
table.Rows.Add(500, 600, 700,400);
Where unit = 400.
Is it possible for where condition here...?
Wednesday, August 30, 2017 7:22 AM
Hi gani7787,
According to your description and needs, you could use the datatable select method, for more details, please check the following sample code:
Sample Code:
<div>
ColumnName:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
DataTable table = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
table.Columns.Add("Lesson1 x SUB A");
table.Columns.Add("Lesson1 x SUB B");
table.Columns.Add("Lesson1 x SUB C");
table.Columns.Add("UNIT");
table.Rows.Add(400, 500, 600, 205);
table.Rows.Add(300, 400, 500, 300);
table.Rows.Add(500, 600, 700, 400);
}
protected void Button1_Click(object sender, EventArgs e)
{
string columnvalue = TextBox1.Text;
DataRow[] result = table.Select(String.Format("{0} >= 300", columnvalue));
foreach (DataRow row in result)
{
Response.Write("Lesson1 x SUB A:" + row[0].ToString() + "Lesson1 x SUB B:" + row[1].ToString() + "Lesson1 x SUB C:" + row[2].ToString() + "UNIT:" + row[3].ToString() + "</br>");
}
}
Best Regards,
Eric Du
Wednesday, August 30, 2017 8:15 AM
Is it possible to write a code in LINQ C#..?