小编典典

在C#中从LINQ提取SQL列扩展属性

sql

我有一个SQL表,在每列上都有扩展的属性。

有没有办法使用Linq2SQL在c#中从LINQ访问这些文件?


阅读 167

收藏
2021-04-28

共1个答案

小编典典

诸如“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);
    }

(或类似的东西;只是启动一个测试数据库…)

GetProperty通过映射的SPROC提供方法的位置。

更新:是的,那有点奏效;例子:

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

2021-04-28