当前位置: 首页 > 面试题库 >

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

费锋
2023-03-14
问题内容

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

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

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



 类似资料:
  • 问题内容: 是否有从文件名中提取扩展名的功能? 问题答案: 使用(请参阅Python 2.X文档或Python 3.X文档): 与大多数手动字符串拆分尝试不同,它将正确地视为没有扩展而不是具有,并且将被视为没有扩展而不是具有:

  • 问题内容: 我正在尝试重构M类型确实扩展了任何内容的类和子类集,即使我们知道它必须是某种类型的子类也是如此。该类型已参数化,我希望其参数化类型可用于已经具有M值的子类。 有什么方法可以定义此类,而不必在参数列表中包括冗余的K和V泛型类型。我希望能够使编译器从子类映射到的M中推断出它们。 换句话说,我希望类声明看起来像这样: 从M的定义可以推断出K和V的类型。 问题答案: 问题在于,它们并没有真正地

  • 本文向大家介绍如何使用LINQ C#展平列表?,包括了如何使用LINQ C#展平列表?的使用技巧和注意事项,需要的朋友参考一下 展平列表意味着将List <List <T >>转换为List <T>。例如,让我们考虑一个List <List <int >>,它需要转换为List <int>。 LINQ中的SelectMany用于将序列的每个元素投影到IEnumerable <T>,然后将所得序列展

  • 问题内容: 如何使用COUNT将LINQ编写为SQL? 例子: 我如何在这里得到计数? 问题答案: 像那样 甚至更容易

  • 问题内容: 我在python中有一个 统一 的对象列表: 现在,我想提取一个具有该类某些属性的列表(比如attr),以便将其传递给某个函数(例如用于绘制该数据) pythonic的做法是什么, ? 也许派生列表并添加一个方法,所以我可以使用一些习惯用法,例如 ? 问题答案: 您还可以编写: 这样,您将获得一个节省内存的生成器。有关更多好处,请参见Generator Expressions 。

  • 现在我想从中得到一个,它包含。 我已经试过了(并期望能奏效): 但这与任何内容都不匹配(包含null)。 (我不想更改XML语法。)