c# - 从 C# 中的 LINQ 中提取 SQL 列扩展属性

标签 c# sql linq-to-sql extended-properties

我有一个 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");

由您决定,哪个不那么骇人听闻。另请注意,您需要将所有者从 tableName 中分离出来。

关于c# - 从 C# 中的 LINQ 中提取 SQL 列扩展属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486536/

相关文章:

c# - 将字符串列表与可用的字典/词库进行比较

c# - AdornerLayer.GetAdornerLayer() 为面板中的所有控件返回 NULL

c# - 在 IIS 中使用带有连接字符串的 Windows 身份验证连接到 SQL 2008 R2

mysql - MYSQL如何查找 "Most Consistent"执行者

带case语句的sql计数查询

sql - 如何在子触发器中访问父表的已删除行

c# - 如何克隆微软图表控件?

c# - 为什么要编写自定义 LINQ 提供程序?

c# - 错误 - 具有多个数据库连接的 LINQ/TransactionScope

linq-to-sql - 从 LINQ To SQL ExecuteQuery 中的存储过程捕获输出参数