我有两个表,一个包含其他实体日志的实体。
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进行了交互。
答案 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();