这是一个有趣的问题,我正在尝试检查其表中是否存在LINQ实体,但在设计时我不知道该实体是什么类型。所以我想我会得到这个表,并尝试使用Contains方法。但是我无法以这样的方式获得表格,以至于我可以在设计时查询它。
我在datacontext上尝试了GetTable
方法,但是在使用GetTable(Of)
时我不知道如何将它转换为适当的类型。 GetTable(Type)
有效,我只使用Entity.GetType()
,但后来我不知道如何查询返回的ITable
。
为了尝试将ITable
转换为可用的东西,我创建了一个接口(IWhatever
),它可以实现我将遇到的所有实体的本机属性。然后我尝试了CType(GetTable(Entity.GetType()), IEnumerable(Of IWhatever)))
没有运气。
任何想法,或者我只是想完全错误?
示例:
Public Function EntityExists(ByVal Entity As Object, ByVal DataContext As MyDataContext) As Boolean
Dim T as Type = Entity.GetType()
Dim EntityITable as ITable = DataContext.GetTable(T)
'Do something to see if ITable contains Entity
End Function
答案 0 :(得分:0)
我不知道vb.net的语法,所以我要做的就是C#:
public bool EntityExists<T>(T Entity, MyDataContext DataContext)
{
ITable<T> EntityITable = DataContext.GetTable<T>();
return EntityITable.Contains(Entity);
}
我想,Vb.net会是这样的:
Public Function EntityExists(Of TEntity)(ByVal Entity As TEntity, _
ByVal DataContext As MyDataContext) As Boolean
Dim EntityITable as ITable(of TEntity) = DataContext.GetTable(of TEntity)()
Return EntityITable.Contains(Entity)
End Function
答案 1 :(得分:0)
最终结果:
Public Function EntityExists(Of TEntity As Class)(ByVal Entity As TEntity, ByVal DataContext As System.Data.Linq.DataContext)
Dim EntityITable As System.Data.Linq.Table(Of TEntity) = DataContext.GetTable(Of TEntity)()
If EntityITable.Contains(Entity) Then
Return True
Else
Return False
End If
End Function
可以使用:
Dim Exists As Boolean = EntityExists(Entity, DataContext)