我的SSAS多维数据集中有许多对象,其中许多对象被创建为不可见.例如:
CREATE MEMBER CURRENTCUBE.[Measures].[Latency Backcolor]
AS CASE
WHEN [Average Latency] > [Web Alert] THEN 6384849
WHEN [Average Latency] > [Web Warn] THEN 4577517
ELSE IIF ( [measures].[Query count] > NULL, 14876123, null)
END, VISIBLE = 0;
Run Code Online (Sandbox Code Playgroud)
这是不可见的:
CREATE MEMBER CURRENTCUBE.[Measures].[Average Latency]
AS IIF ([Measures].[Query Count] > 0, [Measures].[Total Ms] / [Measures].[Query Count], null),
FORMAT_STRING = "#,##0.00000;-#,##0.00000",
BACK_COLOR = [Latency Backcolor],
VISIBLE = 1,
DISPLAY_FOLDER = 'Overall',
ASSOCIATED_MEASURE_GROUP = 'Fact Raw FD';
Run Code Online (Sandbox Code Playgroud)
这是.
我试过两种方法来询问立方体.首先,使用Microsoft.AnalysisServices.AdomdClient命名空间.例如:
using …Run Code Online (Sandbox Code Playgroud) 我有一些格式为 ASCII 十六进制的源数据。我需要将其放入 SQL 数据库的 VARBINARY 字段中。我已将问题减少到最低限度以说明我想做的事情。我有一个存储过程:
CREATE PROCEDURE BinaryDemo
@BinaryData varbinary(max)
AS
BEGIN
PRINT @BinaryData;
END
Run Code Online (Sandbox Code Playgroud)
我知道它“有效”,因为我可以这样做:
DECLARE @tmp varbinary(max);
SET @tmp = CONVERT(varbinary, '1234567890abcdef', 2);
EXEC BinaryDemo @BinaryData=@tmp;
Run Code Online (Sandbox Code Playgroud)
我想做的是跳过中间步骤并调用如下过程:
EXEC BinaryDemo @BinaryData=CONVERT(varbinary, '1234567890abcdef', 2);
Run Code Online (Sandbox Code Playgroud)
不幸的是,SQL 抱怨语法:关键字“CONVERT”附近的语法不正确。
我知道 CONVERT 是正确的,因为我可以:
PRINT CONVERT(varbinary, '1234567890abcdef', 2);
Run Code Online (Sandbox Code Playgroud)
我看到的正是我所期望的。由于源数据的性质和数量,第一个示例(声明/设置/执行)确实是一个糟糕的选择。
在浏览其他答案时,我想出了以下扩展方法:
public static T Convert<T>( this string input )
{
var converter = TypeDescriptor.GetConverter( typeof( T ) );
if ( converter != null )
{
try
{
T result = (T) converter.ConvertFromString( input );
return result;
}
catch
{
return default( T );
}
}
return default( T );
}
Run Code Online (Sandbox Code Playgroud)
我可以像以下一样使用它:
string s = "2011-09-21 17:45";
DateTime result = s.ConvertTo( typeof( DateTime ) );
if ( result == DateTime.MinValue )
doSomethingWithTheBadData();
Run Code Online (Sandbox Code Playgroud)
真棒!效果很好.现在,我想用反射类型做类似的事情.我有:
public static dynamic ConvertTo( this string input, Type …Run Code Online (Sandbox Code Playgroud) 我看过类似的问题,但没有什么比较适合的.我有一个碰巧包含List的对象.我想把它变成我能列举的东西.
例如:
object listObject; // contains a List<Something>
List<object> list;
list = listObject as List<object>; // list contains null after
foreach ( object o in list )
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
从对象到List <object>的转换是个问题.
编辑:
我完成了什么:
object listObject; // contains a List<Something>
List<object> list;
IEnumerable enumerable = listObject as IEnumerable;
if ( enumerable != null )
{
list = enumerable.Cast<object>().ToList();
foreach ( object o in list )
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud) 我有三个类:SomeThing,SomeOtherThing和YetAntherThing.这三个都有一个名为Properties的相同成员.在每个类中,它是一个键/值对,因此我可以引用obj1.Name,obj1.Value,obj2.Name,obj2.Value,obj3.Name和obj3.Value.我想将这三个对象传递给一个方法,该方法可以遍历各自的"属性"集合,而无需在编译时知道它正在进行哪些操作.我想象的是:
SomeThing obj1;
SomeOtherThing obj2;
YetAntherThing obj3;
DoProperties( obj1, obj1.GetType() );
DoProperties( obj2, obj2.GetType() );
DoProperties( obj3, obj3.GetType() );
...
private void DoProperties( object obj, Type objectType )
{
// this is where I get lost. I want to "cast" 'obj' to the type
// held in 'objectType' so that I can do something like:
//
// foreach ( var prop in obj.Properties )
// {
// string name = prop.Name;
// string value = prop.Value;
// }
}
Run Code Online (Sandbox Code Playgroud)
注意:SomeThing,SomeOtherThing和YetAntherThing类是在外部定义的,我无法控制它们或访问它们的源代码,它们都是密封的.
c# ×3
reflection ×2
adomd.net ×1
generics ×1
list ×1
mdx ×1
object ×1
parameters ×1
sql-server ×1
ssas ×1
varbinary ×1