- PR -

LINQのJOIN句

1
投稿者投稿内容
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-07-08 22:42
いつも、お世話になっております。

Linqの勉強がてら以下のようなデータを想定してみたのですが、
うまくいきません。

List<clPoint> Points = new List<clPoint>();
List<clPoly> Polys = new List<clPoly>();

public class clPoint
{
public string ID;
public double X;
public double Y;
}

public class clPoly
{
public string ObID = string.Empty;
public string ObName = string.Empty;
public List<string> ID = new List<string>();
}

public void test()
{
clPoint P = new clPoint();
P.ID = "1";
P.X = 0.0;
P.Y = 0.0;
Points.Add(P);
clPoint P = new clPoint();
P.ID = "2";
P.X = 10.0;
P.Y = 10.0;
Points.Add(P);
clPoint P = new clPoint();
P.ID = "3";
P.X = 10.0;
P.Y = 0.0;
Points.Add(P);

clPoly Po = new clPoly();
Po.ObID = "1";
Po.ObName = "hoge";
Po.ID.Add("1");
Po.ID.Add("2");
Po.ID.Add("3");
Polys.Add(Po);

var q =
from s in Polys
join r in Points on s.ID equals r.ID //JOIN句の式の型が正しくありません。'Join' の呼び出しで型を推論できませんでした。
select s;

}


PolysデータのIDからPointsのX,Yを取得したいのですが、LINQを使っての方法は無理でしょうか?
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2008-07-09 06:48
もっといい方法があるかもしれないですけど、下のような感じとかどうですか?
コード:

var q = from poly in Polys
from point in Points
where poly.ID.Contains(point.ID)
group point by poly.ObID;
foreach (var v in q)
{
Console.WriteLine(v.Key);
foreach (var p in v)
{
Console.WriteLine(" " + p.ID + ", " + p.X + ", " + p.Y);
}
}



実行結果
1
 1, 0, 0
 2, 10, 10
 3, 10, 0
2
 2, 10, 10
 3, 10, 0

[ メッセージ編集済み 編集者: Kazuki 編集日時 2008-07-09 06:50 ]
CACA
会議室デビュー日: 2008/06/03
投稿数: 8
投稿日時: 2008-07-09 10:25
Kazukiさん、ありがとうございます。

ほぼ期待通りの結果を得られました。
ただ、p.IDでソートされている?みたいなので、
調査してみます。
1

スキルアップ/キャリアアップ(JOB@IT)