如何从表格中选择项目但禁止从另一个表格中删除?

时间:2013-01-15 21:25:58

标签: linq entity-framework

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

myEntity所:

id, lat, lon

一个实体在世界上占有一席之地。

MyEntityLog:

id, otherid, otherlat, otherlon

有身份证的实体已经在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进行了交互。

2 个答案:

答案 0 :(得分: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的执行中。

答案 1 :(得分: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();