Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Linq查询数据服务中使用的.NET匿名类型在选择时出错_.net_Entity Framework_Linq_Wcf_Npgsql - Fatal编程技术网

Linq查询数据服务中使用的.NET匿名类型在选择时出错

Linq查询数据服务中使用的.NET匿名类型在选择时出错,.net,entity-framework,linq,wcf,npgsql,.net,Entity Framework,Linq,Wcf,Npgsql,当我编写一个相当简单的Linq查询客户端时,我看到了一个错误,该客户端应该根据我在这里读到的关于类似问题的其他问题来工作 我有以下测试代码: var result = publicCtx.Participants.Where(x => x.CompanyID == 1008) .Select(x => new { ID = x.ID, Sequence = x.Sequence } ).ToList(); 执行此代码时,会出现以下错误: Construction of enti

当我编写一个相当简单的Linq查询客户端时,我看到了一个错误,该客户端应该根据我在这里读到的关于类似问题的其他问题来工作

我有以下测试代码:

var result = publicCtx.Participants.Where(x => x.CompanyID == 1008)
  .Select(x => new { ID = x.ID, Sequence = x.Sequence } ).ToList();
执行此代码时,会出现以下错误:

Construction of entity type instances must use object initializer with default constructor.
从我所读到的内容来看,需要无参数构造函数的标准解决方案是使用匿名类型,我在这里使用匿名类型。数据类型是int?用于CompanyID和Sequence,字符串用于ID。所有这些都是实体模型中可为空的字段(旧数据库仍在转换中)。我正在使用一个WCF数据服务,该服务使用npgsql数据提供程序来提供服务端的实体模型

当我创建一个基本类来返回结果时,一切都会成功:

public class ParticipantResult
{
    public string ID;
    public int? Sequence;
}


编辑:我添加了周围的代码以供参考:

public MainWindow()
{
    InitializeComponent();

    try
    {
        publicCtx = ContextProvider.Public();

        // This first Linq call DOES work with its anonymous type
        var plan = publicCtx.Companies.Where(x => x.ID == 1008).Select(x => new { x.ID, x.PlanID }).FirstOrDefault().PlanID;
        // This throws the error
        var participants = publicCtx.Participants.Where(x => x.PlanID == plan).Select(x => new { ID = x.ID, Sequence = x.Sequence } ).ToList();
        ...
    }
    catch(Exception e)
    {
        Console.Write(e.Message);
    }

    DataContext = this;
    NotifyAll(); // just a quick and dirty PropertyChanged call
}

public static class ContextProvider
{
    public static PublicContext Public()
    {
        var pub = new Public.PublicContext(new Uri(ConfigurationManager.ConnectionStrings["PublicConnection"].ConnectionString));
        pub.SendingRequest2 += AuthenticateContext;
        return pub;
    }

    private static void AuthenticateContext(object sender, System.Data.Services.Client.SendingRequest2EventArgs e)
    {
        var user = ConfigurationManager.AppSettings["Username"];
        var pw = ConfigurationManager.AppSettings["Password"];
        var encodeStr = user + ":" + pw;
        var encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(encodeStr));

        e.RequestMessage.SetHeader("Authorization", "Basic " + encoded);
    }
}

我还需要做些什么才能使匿名类型正常工作,这样我就不需要创建类来只为查询结果选择几列?

我不知道第一个代码段如何抛出报告的错误。你能展示完整的方法吗?在我看来,在这段代码之前或之后发生了更多的事情。我已经添加了周围的代码以进行澄清。谢谢
public MainWindow()
{
    InitializeComponent();

    try
    {
        publicCtx = ContextProvider.Public();

        // This first Linq call DOES work with its anonymous type
        var plan = publicCtx.Companies.Where(x => x.ID == 1008).Select(x => new { x.ID, x.PlanID }).FirstOrDefault().PlanID;
        // This throws the error
        var participants = publicCtx.Participants.Where(x => x.PlanID == plan).Select(x => new { ID = x.ID, Sequence = x.Sequence } ).ToList();
        ...
    }
    catch(Exception e)
    {
        Console.Write(e.Message);
    }

    DataContext = this;
    NotifyAll(); // just a quick and dirty PropertyChanged call
}

public static class ContextProvider
{
    public static PublicContext Public()
    {
        var pub = new Public.PublicContext(new Uri(ConfigurationManager.ConnectionStrings["PublicConnection"].ConnectionString));
        pub.SendingRequest2 += AuthenticateContext;
        return pub;
    }

    private static void AuthenticateContext(object sender, System.Data.Services.Client.SendingRequest2EventArgs e)
    {
        var user = ConfigurationManager.AppSettings["Username"];
        var pw = ConfigurationManager.AppSettings["Password"];
        var encodeStr = user + ":" + pw;
        var encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(encodeStr));

        e.RequestMessage.SetHeader("Authorization", "Basic " + encoded);
    }
}