c# - 使用 Entity Framework 选择多个列

标签 c# .net entity-framework

也许是个简单的问题,但不容易找到所以请原谅我 =) 我尝试选择多列。我使用的语句是:

var dataset2 = from recordset in entities.processlists 
               where recordset.ProcessName == processname 
               select recordset.ServerName, recordset.ProcessID, recordset.Username;

显然,这甚至无法编译。正确的语法是什么? 我也尝试过基于方法,甚至这个语法似乎是正确的,当访问它时会抛出“无法将类型‘匿名类型’转换为类型‘AIM.PInfo’”。 LINQ to Entities 仅支持转换 EDM 原语或枚举类型。”异常。

有什么想法吗?

var dataset = entities.processlists
             .Where(x => x.environmentID == environmentid && x.ProcessName == processname && x.RemoteIP == remoteip && x.CommandLine == commandlinepart)
             .Select(x => new { x.ServerName, x.ProcessID, x.Username })
             .Cast<PInfo>().ToList();

最佳答案

事实上,编译器不知道如何将这个匿名类型(new { x.ServerName, x.ProcessID, x.Username } 部分)转换为 PInfo 对象。

var dataset = entities.processlists
    .Where(x => x.environmentID == environmentid && x.ProcessName == processname && x.RemoteIP == remoteip && x.CommandLine == commandlinepart)
    .Select(x => new { x.ServerName, x.ProcessID, x.Username }).ToList();

这为您提供了一个对象列表(匿名类型),您可以在之后使用,但您不能将其返回或传递给另一个方法。

如果您的 PInfo 对象具有正确的属性,它可以是这样的:

var dataset = entities.processlists
    .Where(x => x.environmentID == environmentid && x.ProcessName == processname && x.RemoteIP == remoteip && x.CommandLine == commandlinepart)
    .Select(x => new PInfo 
                 { 
                      ServerName = x.ServerName, 
                      ProcessID = x.ProcessID, 
                      UserName = x.Username 
                 }).ToList();

假设 PInfo 至少具有这三个属性。

这两个查询都允许您仅获取所需的列,但使用现有类型(如在第二个查询中)允许您将此数据发送到应用的其他部分。

关于c# - 使用 Entity Framework 选择多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19536064/

相关文章:

c# - 如何在控件中使用 PreLoad 事件?

c# - Web API 请求后需要记录 EF DbContext 的 CaSTLe Windsor 生活方式

c# - EntityFramework GroupBy 与 DBFunctions 或替代

c# - Windows 窗体 - 从上次访问表值的数字自动递增

c# - 从 SQL Server 中选择一行,使用该信息执行 Web 请求,然后更新同一行

.net - 从 .Net 程序集检索目标框架版本和目标框架配置文件

.net - 我可以在其回调中放置Threading.Timer吗?

c# - 具有服务层、业务层和 Entity Framework 的 N 层架构

c# - 以编程方式关闭 MessageDialog

c# - 在 C# 中运行存储过程,传递参数并捕获输出结果