我有一个在每列上都有扩展属性的SQL表。
有没有办法使用Linq2SQL在c#中从LINQ访问这些文件?
最佳答案
诸如“ MS_Description”之类的东西?不是AFAIK;您可以编写一个与数据库的存储进行对话的SP(采用数据库对象名称和列名称),然后通过数据上下文进行查询-但没有内置内容。
编写一些使用Expression
来获取要传递的数据库名称(而不是OO名称)的代码也将非常容易。
public static string GetProperty<TContext, TValue>(
this TContext ctx, Expression<Func<TContext, TValue>> selector,
string propertyName)
where TContext : DataContext
{
MemberExpression me = selector.Body as MemberExpression;
if (me == null) throw new InvalidOperationException();
var member = me.Member;
var objType = me.Expression.Type;
var metaType = ctx.Mapping.GetMetaType(objType);
string tableName = metaType.Table.TableName;
string columnName = metaType.GetDataMember(member).MappedName;
return ctx.GetProperty(tableName, columnName, propertyName);
}
(或类似的东西;只是启动一个测试数据库...)
通过映射的SPROC提供
GetProperty
方法的位置。更新:是的,那有点奏效;例:
string desc = ctx.GetProperty(x => x. DataChanges.First().Change, "MS_Description");
First()
是很痛苦的,但是比必须要有两个选择器要丑陋得多。但是可以用这种方式重写它:string desc = ctx.GetProperty(x => x.DataChanges, dc => dc.Change, "MS_Description");
由您决定,这不太hack。另请注意,您需要将所有者从
tableName
中分离出来。关于c# - 在C#中从LINQ提取SQL列扩展属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1486536/