1

2つのテーブルがあり、1つにはエンティティが含まれ、もう1つはentitylogが含まれています。

MyEntity:

id, lat, lon

エンティティは世界でポジションを持っています。

MyEntityLog:

id, otherid, otherlat, otherlon

idを持つエンティティは、otheridの緯度と経度でotheridと相互作用しました。

たとえば、次のエンティティがあります。

1, 4.456, 2.234
2, 3.344, 6.453
3, 6.234, 9.324

(あまり正確ではありませんが、目的を果たします)。

ここで、エンティティ1が2と対話する場合、ログテーブルの結果は次のようになります。

1, 2, 3.344, 6.453

だから私の質問は、エンティティ1の利用可能なインタラクションをログテーブルに含めないようにするにはどうすればよいですか?

エンティティ1の利用可能なインタラクションを一覧表示した結果は、エンティティ3のみである必要があります。これは、エンティティ1がすでに2とのインタラクションを持っているためです。

4

2 に答える 2

1

まず、idと相互作用する のリストを作成しentity 1ます。

var id1 = 1;
var excluded = from l in db.EntityLogs
               where l.id == id1
               select l.otherid;

id次に、このリストに が含まれていない、または に等しいエントリを見つけますid1

var logs= from l in db.EntityLogs
               where !excluded.Contains(l.id) && l.id != id1
               select l;

linq は の実行を延期し、 の実行にexcluded組み込むことに注意してくださいlogs

于 2013-01-15T23:13:39.333 に答える
0

あなたの質問を理解できるかどうかはわかりませんが、詳細が必要だと思いますが、ログテーブルにエントリがないエンティティを一覧表示する場合、myEntitiesがMyEntityのコレクションであり、myEntityLogsがMyEntityLogのコレクション

var firstList = myEntities.Join(myEntityLogs, a => a.Id, b => b.Id, (a, b) => a).Distinct();
var secondList = myEntities.Join(myEntityLogs, a => a.Id, b => b.OtherId, (a, b) => a).Distinct();

var result = myEntities.Except(firstList.Concat(secondList)).ToList();
于 2013-01-15T21:55:01.727 に答える