【问题标题】:.net linq winforms cannot convert anonymous type.net linq winforms 无法转换匿名类型
【发布时间】:2013-08-09 08:27:53
【问题描述】:

您好,我正在尝试对下面的两个表进行连接,但由于某种原因我收到了错误

var query = (from a in pamsEntities.appraisals
             where a.emp_no == employeeId
             join b in pamsEntities.AppraisalReadinesses on a.AppraisalReadiness.Code equals b.Code
             select new { a, b }).ToList();

我收到错误无法转换匿名类型我对 LINQ 还很陌生,所以不确定为什么会发生此错误。

对不起,伙计们,这是我累了,我不得不修改 telrik 报告的查询,以便我在连接中有描述,以便可以在报告中显示它

public List<appraisal> GetAppraisal(int employeeId)
    {
        List<appraisal> Appraisals = new List<appraisal>();

        try
        {

           var query = (from a in pamsEntities.appraisals
                         where a.emp_no == employeeId
                         join b in pamsEntities.AppraisalReadinesses on a.AppraisalReadiness.Code equals b.Code
                          select Tuple.Create(a, b)).ToList();
           Appraisals = query;//pamsEntities.appraisals.Where(a => a.emp_no == employeeId).ToList();
        }
        catch (Exception ex)
        {
            throw new EntityContextException("GetAppraisal failed.", ex);
        }


        return Appraisals;
    }

这是我要复制的 sql 查询

select a.*, b.*
from appraisls a , AppraisalReadiness b
where a.Readiness = b.code
and a.emp_no = emp_code;

where empcode is just a vairable

就是这样

【问题讨论】:

    标签: .net sql winforms


    【解决方案1】:

    您的代码将结果投影到一系列匿名类型实例new { a, b },并且您正试图将该列表用作其他内容的列表。而是将结果投影到正确的命名类型中。

    例如,一种解决方案可能是

    var query = (from a in pamsEntities.appraisals
                 where a.emp_no == employeeId
                 join b in pamsEntities.AppraisalReadinesses 
                 on a.AppraisalReadiness.Code equals b.Code
                 select Tuple.Create(a, b)).ToList();
    

    这将为您提供Tuple&lt;T1, T2&gt; 的列表,其中T1a 的类型,T2b 的类型。您当然可以创建自己的自定义类型:

    class MyType
    {
        // I am guessing about the type names here, based on your query
        Appraisal Appraisal; { get; set; }
        AppraisalReadiness Readiness; { get; set; }
    }
    

    并像在中一样使用它

    select new MyType { Appraisal = a, Readiness = b }
    

    【讨论】:

    • 你能不能像在 sql 查询中一样选择所有元素,比如 go a.*
    • @David:你可以,但是当你想实现结果时,你必须使用适当的命名类型。
    • 我相信 select new {AppraisalClass = a, AppraisalReadinessClass = b} 也可以
    • 这是我对它的描述方式吗,因为它和 tupals 说的一样
    • @David:编辑问题以准确显示您尝试过的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多