Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过选择器表达式创建匿名类型_C#_Linq_Dynamic_Lambda_Expression - Fatal编程技术网

C# 通过选择器表达式创建匿名类型

C# 通过选择器表达式创建匿名类型,c#,linq,dynamic,lambda,expression,C#,Linq,Dynamic,Lambda,Expression,是否有一种方法可以动态地将一组选择器表达式投影到一个新的匿名类型中,该类型可用于例如Select()语句或组合成员访问器 假设我有一个具有3个属性的类 public class DummyClass { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } } 为了使用成员访问器访问其中一个,我可以编写如下内容: public

是否有一种方法可以动态地将一组选择器表达式投影到一个新的匿名类型中,该类型可用于例如Select()语句或组合成员访问器

假设我有一个具有3个属性的类

public class DummyClass {

    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }

}
为了使用成员访问器访问其中一个,我可以编写如下内容:

public class DummyClass...
    // x => x.Id
    public static Expression<Func<DummyClass, int>> IdAccessor = f => Id;
但是,我无法动态地执行此操作,因为我无法在不知道其实际类型的情况下使用例如
Expression.New()
创建匿名类型


编辑


我用一个不同的例子重新写了这个问题,应该会更清楚一些。

不确定“两个选择器”的真正含义,但这就是我如何使用匿名类型;从对象列表中选择特定值时。 请评论,如果这不是你的意思

var myDummies = new List<DummyClass> ...

var result = myDummes.Select(o => new 
{ 
    IdAccessor = o.Id, 
    NameAccessor = o.Name
    Header = String.Format("{0} ({1})", o.Name, o.Category)
});

foreach(var r in result) { ... }
var myDummies=新列表。。。
var result=myDummes.Select(o=>new
{ 
IdAccessor=o.Id,
NameAccessor=o.Name
Header=String.Format(“{0}({1})”,o.Name,o.Category)
});
foreach(结果中的var r){…}

要详细说明吗?使用
Expression.New()
创建
ExpandoObject
?您的
returnnew…
语句的上下文是什么?你想还什么?选择器?还是实际的匿名类型对象?在任何情况下,您希望如何处理匿名类型在声明它们的方法之外基本上是无用的问题?这个问题是非常不清楚的,尤其是因为缺乏一个好的代码示例来充分说明你在说什么。
var myDummies = new List<DummyClass> ...

var result = myDummes.Select(o => new 
{ 
    IdAccessor = o.Id, 
    NameAccessor = o.Name
    Header = String.Format("{0} ({1})", o.Name, o.Category)
});

foreach(var r in result) { ... }