我有一个在每列上都有扩展属性的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/

10-13 08:26