LINQ和创建NON匿名返回值
本文关键字:返回值 NON 创建 LINQ | 更新日期: 2023-09-27 18:28:22
我想我理解从返回匿名类型的记录,但在这个过程中,我想创建NEW CatalogEntries,并根据所选值设置它们。(上下文是Devart LinqConnect数据库上下文,它让我可以获取视图)。
我的解决方案有效,但看起来很笨拙。我想在一个from声明中做到这一点。
var query = from it in context.Viewbostons
select it;
foreach (GPLContext.Viewboston item in query)
{
CatalogEntry card = new CatalogEntry();
card.idx = item.Idx;
card.product = item.Product;
card.size = (long)item.SizeBytes;
card.date = item.Date.ToString();
card.type = item.Type;
card.classification = item.Classification;
card.distributor = item.Distributor;
card.egplDate = item.EgplDate.ToString();
card.classificationVal = (int)item.ClassificationInt;
card.handling = item.Handling;
card.creator = item.Creator;
card.datum = item.Datum;
card.elevation = (int)item.ElevationFt;
card.description = item.Description;
card.dirLocation = item.DoLocation;
card.bbox = item.Bbox;
card.uniqID = item.UniqId;
values.Add(card);
}
CatalogResults response = new CatalogResults();
我刚试过这个:
var query2 = from item in context.Viewbostons
select new CatalogResults
{ item.Idx,
item.Product,
(long)item.SizeBytes,
item.Date.ToString(),
item.Type,
item.Classification,
item.Distributor,
item.EgplDate.ToString(),
(int)item.ClassificationInt,
item.Handling,
item.Creator,
item.Datum,
(int)item.ElevationFt,
item.Description,
item.DoLocation,
item.Bbox,
item.UniqId
};
但我得到以下错误:
错误79无法使用初始化类型"CatalogService.CatalogResults"集合初始值设定项,因为它未实现'System.Collections.IEnumerable'C:''Users''ysg4206''Documents''Visual演播室2010''Projects''CatalogService''CatalogService.svc.cs 91 25 CatalogService
我应该告诉你我想返回的CatalogResults的定义是什么:
[DataContract]
public class CatalogResults
{
CatalogEntry[] _results;
[DataMember]
public CatalogEntry[] results
{
get { return _results; }
set { _results = value; }
}
}
我今天头脑迟钝,向大家道歉。你很乐于助人。最终结果将由WCF序列化为JSON结构,我需要将数组封装在一个包含一些大小信息的对象中。
由于.NET 3.0
,您可以使用如下所示的对象初始值设定项:
var catalogResults = new CatalogResults
{
results = context.Viewbostons
.Select(it => new CatalogEntry
{
idx = it.Idx,
product = it.Product,
...
})
.ToArray()
};
因此,如果这只是使用CatalogEntry
属性设置器的一个地方,请将所有属性设置为只读,这样CatalogEntry
将是不可变的。
MSDN,对象初始值设定项:
对象初始值设定项允许您将值分配给对象,而不必显式调用构造函数。
这里的技巧是创建一个IQueryable,然后将FirstOrDefault()值作为响应(如果您想要一个响应)或ToArray(如果您需要一个数组)。您收到的错误(错误79无法使用集合初始值设定项初始化类型"CatalogService.CatalogResults",因为它未实现"System.Collections.IEnumerable")是因为您正试图在CatalogEntry对象内创建IEnumeraable(通过引用项变量)。
var response = (from item in context.Viewbostons
select new CatalogEntry()
{
idx = item.Idx,
product = item.Product,
size = (long)item.SizeBytes,
...
}).ToArray();
您不必在Linq select中创建匿名类型。您可以指定您的真实类型。
var query = context.Viewbostons.Select( it =>
new CatalogEntry
{
idx = it.idx,
... etc
});
这应该有效:
var query = from it in context.Viewbostons
select new CatalogEntry()
{
// ...
};