我有一个表,其中包含Id作为主键和LastMeterReadingId(引用同一个表的外键)之类的列 - 类似于Parent Meter Reading.
我想得到所有尚未使用的行,如Parent.我想避免当抄表是超过一米读数的父母时的情况.
我知道如何加入同一个表,但我不知道如何只选择那些不是父表的记录.这就是没有条件语句的查询的样子.
return (from m in uow.MeterReadingReadWriteRepository.Query()
join parent in uow.MeterReadingReadWriteRepository.Query() on m.Id equals parent.LastMeterReadingId
select new MeterReadingDto()
{
(...)
}).ToList();
Run Code Online (Sandbox Code Playgroud)
你知道如何以有效的方式实现它吗?
问候.
我正在寻找最优雅和有效的方法来从一个列表中排除元素,这些元素存在于另一个列表中.让我们说有:
List<A> As which contains more than 1 000 000 records
List<B> Bs which contains more than 100 000 records
Run Code Online (Sandbox Code Playgroud)
我需要从列表As
中删除所有As.Id
相等的元素Bs.Id
.我只需要从包含相同Id的Bs中减少As的元素.操作我重复数百次.解决该问题的最有效(和优雅)方法是什么?我希望LINQ有NotIn
.
foreach(a in As)
{
if(Bs.Any(b => b.Id == a.Id)
As.Remove(a);
}
Run Code Online (Sandbox Code Playgroud)
需要很长时间才能完成.
我发现一些代码看起来像这样:
var obj = new SomeClass();
obj.FirstProperty = Magic.GetFirstProperty();
//...
obj.CreateDate = DateTime.Now;
obj.ModificationDate = obj.CreateDate;
Run Code Online (Sandbox Code Playgroud)
有很多属性,所以我决定重构该代码并使用对象初始化器.
var obj = new SomeClass
{
FirstProperty = Magic.GetFirstProperty();
//...
CreateDate = DateTime.UtcNow,
ModificationDate = DateTime.UtcNow
};
Run Code Online (Sandbox Code Playgroud)
在对象初始化块中将属性从一个重写到另一个是不可能的(据我所知)并且在块外看起来很糟糕(在我看来).
我决定进行测试,并且我从600到1200个不同的对中进行了10 000 000次迭代.这是代码:
class Program
{
static void Main(string[] args)
{
int j = 0;
for (int i = 0; i < 10000000; i++)
{
var obj = new SomeClass
{
First = DateTime.UtcNow,
Second = DateTime.UtcNow
};
if (obj.First != obj.Second)
Console.WriteLine(j++ + " …
Run Code Online (Sandbox Code Playgroud)