2017-07-31 18 views
-2
SELECT Meter.SerialNumber as serial, 
SupplyPoint.Id as supplypoint, 
SupplyType.Id as supplytype, 
SupplyType.Name as supplytypename 
FROM Meter 
INNER JOIN SupplyPoint ON Meter.SupplyPointId = SupplyPoint.Id 
INNER JOIN SupplyType ON SupplyPoint.SupplyTypeId = SupplyType.Id; 

このクエリを使用して、シリアルに基づいてメーターの供給タイプを見つけることができます。今まで私はこの関数を書いています:LINQを使用してSQLデータベースを照会しています

var query = from meters in db.Meters 
join supplyPoint in db.SupplyPoints on meters.SupplyPointId 
equals supplyPoint.Id 
join supplyType in db.SupplyTypes on supplyPoint.SupplyTypeId equals    
supplyType.Id 
select new { serial = meters.SerialNumber, type = supplyType.Name }; 
foreach (var meter in query) 
    { 
     if (meter.serial == serial) 
      return meter.type; 
    } 
return "Meter Type Not Specified";` 

私はFindType(文字列シリアル)を呼び出すと、その型を返します。誰もそのようなクエリを変換するためのより良いコードを提案することはできますか? LINQの詳細を知るための方向性も歓迎します。

+0

これまでに何を試しましたか?あなたのデータベーステーブルはどのように見えますか? Entity Frameworkを使用してデータコンテキストを設定しましたか? – slugster

+0

あなたの変換はうまく見えますが、通常はLINQを使って答えを見つけることもできます: 'var ans =(meter.serial == serial select meterのquery from meter).SingleOrDefault(); return(meter == null)? "メータータイプが指定されていません":meter.type; ' – NetMage

答えて

0

あなたが何をしているのか分からずに、あなたに具体的な助けを与えるためにできることはほとんどありません。まず、SQL文をLINQに変換することに慣れておきたいと思います。

LINQには、データソースを定義する方法であるからfromで始まるクエリ構文があります。 SELECT FirstName FROM Authors

slugsterさんのコメントで示唆されているようにDBがDataContextのへの参照です
from auth in db.Authors 
select auth.FirstName 

になります。

あなたが始める必要がある前に、材料のかなりを読み取るためのLINQ at the following url

2

あなたがアップしているの詳細情報を探すことができます。

  1. エンティティフレームワークhereについて読んでください。
  2. LINQ to SQL hereを参照してください。

うまくいけば、問題が次のコードになっていることに気づくでしょう。

var result = context.YourTable.FirstOrDefault(r => r.Field == searchValue); 
関連する問題