VB Linq中聚合关键字的C#等价性是什么?
我不是VB的超级粉丝。有人能帮我用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)
公共只读属性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);
}
}