Ron*_*ald 50 .net c# entity-framework
也许一个简单的问题,但无法轻易找到它原谅我=)我尝试选择多个列.我使用的声明是:
var dataset2 = from recordset in entities.processlists
where recordset.ProcessName == processname
select recordset.ServerName, recordset.ProcessID, recordset.Username;
Run Code Online (Sandbox Code Playgroud)
显然,这甚至都没有编译.什么是正确的语法?我也试过基于方法,甚至强硬这个语法似乎是正确的,当访问它时抛出'无法强制转换类型'匿名类型'来键入'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();
Run Code Online (Sandbox Code Playgroud)
Réd*_*tar 96
实际上,编译器不知道如何将此匿名类型(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();
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个可以在之后使用的对象(匿名类型)列表,但您无法返回该对象或将其传递给另一个方法.
如果您的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();
Run Code Online (Sandbox Code Playgroud)
假设PInfo至少具有这三个属性.
这两个查询都允许您仅获取所需的列,但使用现有类型(如第二个查询中)允许您将此数据发送到应用的其他部分.
And*_*ard 17
例如,您可以选择匿名类型
var dataset2 =
(from recordset in entities.processlists
where recordset.ProcessName == processname
select new
{
serverName = recordset.ServerName,
processId = recordset.ProcessID,
username = recordset.Username
}).ToList();
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建一个代表您的选择的新类
public class MyDataSet
{
public string ServerName { get; set; }
public string ProcessId { get; set; }
public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
那么你可以举例如下
var dataset2 =
(from recordset in entities.processlists
where recordset.ProcessName == processname
select new MyDataSet
{
ServerName = recordset.ServerName,
ProcessId = recordset.ProcessID,
Username = recordset.Username
}).ToList();
Run Code Online (Sandbox Code Playgroud)
小智 5
为什么不在以下位置创建新对象.Select
:
.Select(x => new PInfo{
ServerName = x.ServerName,
ProcessID = x.ProcessID,
UserName = x.Username }).ToList();
Run Code Online (Sandbox Code Playgroud)
获取指定类型数据的正确方法:
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() /// To get data from database
.Select(x => new PInfo()
{
ServerName = x.ServerName,
ProcessID = x.ProcessID,
Username = x.Username
});
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅: 无法在 LINQ to Entities 查询中构造实体
归档时间: |
|
查看次数: |
204464 次 |
最近记录: |