VB Linq中聚合关键字的C#等价性是什么?

VB Linq中聚合关键字的C#等价性是什么?,c#,vb.net,linq,C#,Vb.net,Linq,我不是VB的超级粉丝。有人能帮我用c语言编写这段代码吗 公共只读属性HasErrors()为布尔值 得到 返回(在Me中为o)_ 设errObj=TryCast(o,IDataErrorInfo)_ 其中If(errObj不是空,errObj.Error没有空,False)_ 进入计数())>0 结束 端属性 更新 Public MustInherit Class MyBaseCollection(Of T) Inherits ObservableCollection(Of T)

我不是VB的超级粉丝。有人能帮我用c语言编写这段代码吗

公共只读属性HasErrors()为布尔值
得到
返回(在Me中为o)_
设errObj=TryCast(o,IDataErrorInfo)_
其中If(errObj不是空,errObj.Error没有空,False)_
进入计数())>0
结束
端属性
更新

Public MustInherit Class MyBaseCollection(Of T)
    Inherits ObservableCollection(Of T)

    Public ReadOnly Property HasErrors() As Boolean
        Get
            Return (Aggregate o In Me _
                    Let errObj = TryCast(o, IDataErrorInfo) _
                    Where If(errObj IsNot Nothing, errObj.Error <> Nothing, False) _
                    Into Count()) > 0
        End Get
    End Property

    Sub New(ByVal query As IEnumerable(Of T), ByVal context As OMSEntities)
        MyBase.New(query)
    End Sub

End Class
Public MustInherit类MyBaseCollection(属于T)
继承(T的)可观察集合
公共只读属性HasErrors()为布尔值
得到
返回(在Me中为o)_
设errObj=TryCast(o,IDataErrorInfo)_
其中If(errObj不是空,errObj.Error没有空,False)_
进入计数())>0
结束
端属性
Sub New(ByVal查询为IEnumerable(Of T),ByVal上下文为OMS实体)
MyBase.New(查询)
端接头
末级

在C#中基于语法的查询中,
Aggregate
没有等价物。你必须使用方法

public bool HasErrors
{
    get
    {
        return this.Select(x => x as IDataErrorInfo)
                   .Where(x => x != null && x.Error != null)
                   .Count() > 0;
    }
}
或更简单的版本,带有
计数(谓词)
重载:

public bool HasErrors
{
    get
    {
        return this.Select(x => x as IDataErrorInfo)
                   .Count(x => x != null && x.Error != null) > 0;
    }
}
或者更好地使用
任何(谓词)


我不是百分之百知道这是什么,但我认为你可以用它

this.Any(o => {
  var errObj = o as IDataErrorInfo;
  return errObj != null && errObj.Error != null
});
或者,您可以采用更具功能性的风格:

this.Select(o => o as IDataErrorInfo)
    .Any(errObj => errObj != null && errObj.Error != null);

这不是精确的翻译,但会得到相同的结果:

public bool HasErrors
{
    get
    {
        return this.OfType<IDataErrorInfo>().Any(x => x.Error != null);
    }
}
public bool有错误
{
得到
{
返回此.OfType().Any(x=>x.Error!=null);
}
}

我尝试使用联机代码转换来转换它。但我最终得到了未编译的代码。C#中没有
TryCast
@MarcinJuraszek啊,我认为这是他自己的功能,在这种情况下,我们可以使用
作为
this.Select(o => o as IDataErrorInfo)
    .Any(errObj => errObj != null && errObj.Error != null);
public bool HasErrors
{
    get
    {
        return this.OfType<IDataErrorInfo>().Any(x => x.Error != null);
    }
}