1

我有两张表,一张包含其他实体日志。

我的实体:

id, lat, lon

一个实体在世界上有一个位置。

我的实体日志:

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,因为它已经与 2 进行了交互。

4

2 回答 2

1

首先列出与id交互的 s 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 回答