现在我会尝试正确描述我的情况: 我有两个具有相同属性的模型是这个模型:
[Table("OperatorA")]
public class OperatorA
{
[Key]
public string Id { get; set; }
public string Number { get; set; }
public string CallTime { get; set; }
public string Duration { get; set; }
public decimal Cost { get; set; }
}
和
[Table("OperatorB")]
public class OperatorB
{
[Key]
public string Id { get; set; }
public string Number { get; set; }
public string CallTime { get; set; }
public string Duration { get; set; }
public decimal Cost { get; set; }
}
之后我在这个表中插入数据,一切正常,但是 -
现在我需要比较这两个表:
1.检查表和视图主题中的重复Number
属性。
和
2.查看所有不重复的Number
值。
任何人都可以帮我控制器。
public async Task<ActionResult> Index()
{
var operatorA = await db.OperatorAs.ToListAsync();
var operatorB = await db.OperatorBs.ToListAsync();
// Want get all operatorB Numbers witch not equals OperatorA Numbers
}
答案 0 :(得分:1)
请注意,这样的查询很容易导致严重的性能问题,具体取决于列表中的记录数。使用await
和ToListAsync
将整个列表发送到应用程序服务器,然后在控制器中过滤结果通常不是一个好习惯。仅在您确定列表不会超过几百条记录(作为原始估算)时使用它。执行操作使用的执行时间和数据量的一些指标。
最好的解决方案是在数据库服务器中执行查询过滤,并在执行.ToList()
之前应用 >>,因为当您实现结果记录列表时查询在数据库中执行,任何进一步的过滤或处理都不会在数据库中完成,而是在应用程序服务器中完成。
这个在两个表之间使用join
的示例查询,可以获得OperatorA
中重复Number
的{{1}}元素列表:
OperatorB
它生成这个SQL:
var query = db.OperatorAs
.Join<OperatorA, OperatorB, string, OperatorA>(
db.OperatorBs,
a => a.Number,
b => b.Number,
(a, b) => a)
.ToList();
如果列表非常大,即使在数据库服务器中也会导致性能问题,但数据库服务器比应用程序服务器更好地处理这些问题。有办法解决它。