我有两种不同的数据源。例如,假设一个源包含id和lastnames,第二个源包含其他id和lastnames。我想将它们组合成JSON,如下所示:
dp2[n-1]
为了实现它,我正在尝试来自不同来源的“联盟”ID “Union”来自不同来源的姓氏,之后,在一个名为“full”的匿名类型变量中“Zip”它。
{
"Full": [
{
"id": 1,
"lastname": "Doe"
},
{
"id": 5,
"lastname": "Smith"
}
]
}
idsFromOneSource , idsFromOtherSource 为 var ids = idsFromOneSource.Union(idsFromOtherSource);
var lastNames = lastNamesFromOneSource.Union(lastNamesFromOtherSource);
var full = new
{
Full = ids.Zip(lastNames, (i, l) => new { id = i, lastName = l })
};
return JsonConvert.Serialise(full);
且 lastNamesFromOneSource , lastNamesFromOtherSource 为{{1} }
我收到了这个错误。
LINQ to Entities无法识别方法'System.Linq.IQueryable
IQueryable<int>
2 [System.Int32,System.String]] Zip [Int32,String,&lt;&gt; f__AnonymousType2IQueryable<string>
1 [System.Int32],System.Collections.Generic.IEnumerable1[<>f__AnonymousType2
1 [System.Func2](System.Linq.IQueryable
2 [System.Int32,System.String]]])'方法,此方法无法翻译进入商店表达。
对于序列化我正在使用NewtonSoft Json.net,但看起来不是问题。我将不胜感激任何帮助。
答案 0 :(得分:3)
你不能在linq-to-Entities中Zip
。您可以通过调用AsEnumerable
将它们转换为linq-to-objects调用:
var ids = idsFromOneSource.Union(idsFromOtherSource);
var lastNames = lastNamesFromOneSource.Union(lastNamesFromOtherSource);
var full = new
{
Full = ids.AsEnumerable().Zip(lastNames, (i, l) => new { id = i, lastName = l })
};
return JsonConvert.Serialise(full);
但您可能知道的一个警告是,集合需要完全对齐(以相同的顺序)。看起来有一些关键来加入不同的集合会更安全。
答案 1 :(得分:2)
#!/bin/awk
BEGIN {
start = 2
end = 6
}
{
if( ($2 >= start) && ($2 <= end) )
{
sum = sum + $2
n = n + 1
}
}
END {
print ( n!= 0) ? sum / n : 0
}
#eof#
。虽然可以尝试在调用Zip
之前实现这些值(如D Stanley所示),但依赖它可能不是一个好主意(如Zip
那样)关于两个查询之间匹配的值,特别是因为如果一个姓氏来源与其他姓氏来源具有一些相同的值,Zip
会以不同的方式匹配。
我建议您重新考虑源查询,看看您是否可以选择ID和每个来源的姓氏。无论你在哪里存储姓氏,这些姓氏和身份证之间都应该有一些关系,对吧?因为关系数据库应该如何工作,对吧? Union
只要具有完全相同的形状,就可以处理复杂的类型,所以这样的事情应该有效:
Union
但是如果您的来源不是来自相同的Entity Framework上下文,那么您需要实现这两个来源,以便var idsAndFullNames = idsAndFullNamesFromOneSource
.Select(src => new
{
id = src.ID,
fullName = src.FullName
})
.Union(
idsAndFullNamesFromOtherSource.Select(src => new
{
id = src.Id,
fullName = src.full_name
})
.ToList();
在内存中发生:
Union()