2016-06-14 5 views
0

クエリー(SQL Serverクエリからデータテーブルc#のLinqへのSQLクエリ)を使用して、 )クエリー(SQLクエリからデータテーブルC#へのSQLクエリー)

DataTableは、以下の列を持ち、すべてが文字列です。

Value From | Value To | % 
1.00   1.50  10.6% 
1.51   2.0  20.4% 
2.01   2.50  25.5% 

ユーザーが指定した入力値は2倍です。 私は、ユーザー指定された入力がレンジの間で「からの値」と「の値に」私はSQLからSQLクエリと同じ結果を得ることができるよ

Ex: If input is 1.81 then I should get 20.4% as a query result. 
    If user gives 2.05 then I should get 25.5% as a query result. 
    If user gives 1.35 then I should get 10.6% as a query result. 

に一致するところdatatbleから%の列の値を取得する必要がありますサーバーストアドプロシージャ:
select % from [TestDatabase_GPA].[dbo].[AcadamicGPA] where @Acadamic_GPA between Value From and Value To Linqを使用してDataTableから同じ結果を得るために、SQLクエリを変換するにはどうすればよいですか。ここで問題は、datatable型のデータ型stringをdoubleに変換してから操作を実行することです。私はこれを試したCompare string values with double in DataTable.Select()しかし、私は必要な結果を得ていない。私はLinqには新しく、サンプルコードやアイデアを教えていただければ幸いです。

答えて

0

は、このLINQクエリを試してみてください。

from dataTable.AsEnumerable() 
where @Acadamic_GPA >= Convert.ToDouble(Value From) && @Acadamic_GPA <= Convert.ToDouble(Value To) 
select %; 

Reference

0

GetPercent方法は、あなたが必要な答えを与える必要があります。

using System; 
using System.Linq; 

namespace ConsoleApplication8 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(GetPercent("1.68")); 
     Console.ReadLine(); 
    } 

    static string GetPercent(string val) 
    { 
     var vals = new[] 
     { 
      new {from = "1.00", to = "1.50", percent = "10.6%"}, 
      new {from = "1.51", to = "2.0", percent = "20.4%"}, 
      new {from = "2.01", to = "2.50", percent = "25.5%"} 
     }; 

     return 
      vals.Single(
       v => 
        Convert.ToDouble(val) >= Convert.ToDouble(v.from) && 
        Convert.ToDouble(val) <= Convert.ToDouble(v.to)).percent; 
    } 
} 
} 

私が提供したアプリケーションを使用しても動作することはテストできますが、明らかにこれはソリューションに合わせて調整する必要があります。

2

列がstringデータ型であるため、私はinputが、私はすべてのDataTableの列は「からの値」と 'を含む文字列ですDouble

var percentage = (from myRow in table.AsEnumerable() 
         where Convert.ToDouble(myRow.Field<string>("Value From")) <= Acadamic_GPA && Convert.ToDouble(myRow.Field<string>("Value To")) >= Acadamic_GPA 
         select myRow.Field<string>("%")).FirstOrDefault(); 
+0

にキャストしていないDoubleと言われてDoubleの.asにそれらをキャストしています私は '値'列の下にある最後の行として '合計'を持っています。だから私はそれらを倍にすることはできません。私はこれを試しましたが、私は受け取った(指定されたキャストは有効ではありません)例外 – priya777

+0

@ priya777更新された質問 – Chaitanya

+0

ありがとうございます。それはマイナーなデータ型の調整で動作します。 FirstOrDefault()の使用法は何ですか?ここに最終版があります。 avgPoints> = Convert.ToDouble(row.Field ( "の値から"))&& avgPoints <= Convert.ToDouble(row.Field ( "値"))()(finaExpeResult.AsEnumerableの行から が選択 行番号.Field ( "%"))。FirstOrDefault(); – priya777

関連する問題