首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LINQ返回类型转换为C#类

将LINQ返回类型转换为C#类
EN

Stack Overflow用户
提问于 2016-02-05 07:52:57
回答 2查看 3.3K关注 0票数 1

我对我的DBModel类有一个LINQ查询,它返回一个匿名类型。我必须将其转换为已知的C#类类型。

我可以在DBModel类中直接使用已知类型,但不允许它在我的项目体系结构中使用任何已知类型。

示例:

代码语言:javascript
复制
static dynamic getEmployees()
{
    SampleDB db = new SampleDB();
    var result = (from x in db.Employes
    select new
    {
        name = x.FirstName + " " + x.LastName,
        department = x.DepartmentId
    });
    return result;
}

我已知的类型:

代码语言:javascript
复制
public class Emp
{
    public string name { set; get; }
    public int department { set; get; }
}

程序:

代码语言:javascript
复制
dynamic d = getEmployees();
List<Emp> result = d.cast<Emp>();
//Other code....

如何将动态类型转换为列表?在getEmployees中,我不能使用

代码语言:javascript
复制
static List<Emp> getEmployees()
{
    SampleDB db = new SampleDB();
    var result = (from x in db.Employes
    select new Emp
    {
        name = x.FirstName + " " + x.LastName,
        department = x.DepartmentId
    }).ToList();

    return result;
}

有人能告诉我如何将LINQ返回类型转换为已知类型吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-05 09:23:52

Cast<>是一种扩展方法,动态对象不直接支持这些方法。

您可以通过调用像这样的扩展方法:Enumerable.Cast<Emp>(d)来解决这个问题,但是这仍然不能工作,从匿名类型到Emp没有已知的强制转换。

您可以在.Select()中尝试类似的方法,这应该是可行的。然而,最简单的方法是简单的for循环。

代码语言:javascript
复制
dynamic d = getEmployees();
var emps = new List<Emp>();
foreach (var emp in d)
{
    emps.Add(new Emp(){name = emp.name, department = emp.department};
}

如果希望将集合按需使用为IEnumerable,而不是将其放在列表中,则可以将其包装在帮助器方法中:

代码语言:javascript
复制
IEnumerable<Emp> getEmps(dynamic d)
{
    foreach (var emp in d)
    {
        yield return new Emp(){name = emp.name, department = emp.department};
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-02-05 08:14:00

cast类型上没有dynamic方法。您应该做的是显式地将您的动态转换为所需的类型,因为在dynamic方法中,您有一个非殖化对象,您必须执行一个中间步骤。类似于:

代码语言:javascript
复制
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var json = serializer.Serialize(d);
List<Emp> result = serializer.Deserialize<List<Emp>>(json);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35218897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档