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