1

いくつかのリレーションを含むデータセットを返したいのですが、クエリは問題ありませんが、他のテーブルから実際の値ではなく ID を取得しています...これがクエリです

        var thr=
            from u in dc.thresholds
            select u;

これは次のようなものを返します。

id: 1
name: some name
type_id: 1
owner_id: 1

これらのテーブルの値で type_id と owner_id を取得したいので、次のようになります。

id: 1
name: some name
type_id: Danger
owner_id: John Smith

アドバイスをいただければ幸いです。LINQ to SQL を始めたばかりで、少し迷っています...

ありがとうございました

4

2 に答える 2

0

ナビゲーションプロパティを使用して、必要に応じてデータをロードします。ナビゲーションプロパティ(Threshold.TypeおよびThreshold.Owner)が存在しない場合は、dbmlを開いて関連付けを追加します。

ナビゲーションプロパティを怠惰に使用すると、余分なクエリが発生します。

List<Threshold> result = dc.Thresholds.ToList();  //run first query

foreach(Threshold t in result)
{
  Type type = t.Type;  //run second query (per row)
  Owner owner = t.Owner; //run third query (per row)
}

DataLoadOptionsを使用して、クエリ中に関連データを熱心にロードします。

DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Threshold>(t => t.Type);
options.LoadWith<Threshold>(t => t.Owner);

dc.LoadOptions = options;

List<Threshold> result = dc.Thresholds.ToList();  // run query

foreach(Threshold t in result)
{
  Type type = t.Type;  //these values are already loaded by this point.
  Owner owner = t.Owner;
}

クエリを記述して、必要な形状のデータをロードします

var query =
  from t in dc.Thresholds
  let type = t.Type
  let owner = t.Owner
  select new {Threshold = t, Type = type, Owner = owner};

var result = query.ToList();  //run query

foreach(var x in result)
{
  Threshold t = x.Threshold;
  Type type = x.Type;  //might be null.
  Owner owner = x.Owner;  //might be null.
}
于 2012-10-30T14:33:06.530 に答える
0

type_id(他のテーブルのtype_name)の名前の値を表示したい場合は、次のように結合を使用する必要があります。

var thr=
            from u in dc.thresholds
        join y in dc.yourTable on u.type_id equal y.type_id
        select new{u.id,u.name,typeName=y.name,....};
于 2012-10-30T05:52:25.013 に答える