所以我试图通过相同int变量的有序列表中的int var来命令查询;例如查询必须按项目的列表顺序排序。每个datacontext来自不同的数据库,这就是我根据宠物名称顺序将第一个查询转换为id的有序列表的原因,只有pet id可以从第二个查询的数据字段中获得,查询看起来像:
using (ListDataContext syndb = new ListDataContext())
{
using (QueryDataContext ledb = new QueryDataContext())
{
// Set the order of pets by name and make a list of the pet id's
var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
// Reorder the SoldPets query using the ordered list of pet id's
var slp = ledb.SoldPets.OrderBy(x => stp.IndexOf(x.petId)).Select(x => x);
// do something with the query
}
}
第二个查询给我一个“方法”Int32 IndexOf(Int32)'没有支持的SQL转换。“错误,有办法做我需要的吗?
答案 0 :(得分:2)
LINQ to SQL(EF)必须将您的LINQ查询转换为可以针对SQL服务器执行的SQL。该错误试图说的是IndexOf
的.NET方法没有SQL等价物。您可能最好从SoldPets
表中获取数据而不执行IndexOf
部分,然后从LINQ to SQL(EF)执行任何剩余的排序。
这样的事情应该有效:
List<StoredPet> storedPets;
List<SoldPet> soldPets;
using (ListDataContext listDataContext = new ListDataContext())
{
using (QueryDataContext queryDataContext= new QueryDataContext())
{
storedPets =
listDataContext.StoredPets
.OrderBy(sp => sp.Name)
.Select(sp => sp.PetId)
.ToList();
soldPets =
queryDataContext.SoldPets
.ToList();
}
}
List<SoldPets> orderedSoldPets =
soldPets.OrderBy(sp => storedPets.IndexOf(sp.PetId))
注意:您的示例中的PetId
更改大写,因此您可能希望查看该内容。
答案 1 :(得分:1)
LinqToSql无法将您的linq语句转换为SQL,因为没有等效的IndexOf()
方法。您必须首先使用ToList()
方法执行linq语句,然后在内存中进行排序。
using (ListDataContext syndb = new ListDataContext())
using (QueryDataContext ledb = new QueryDataContext())
{
var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
// Reorder the SoldPets query using the ordered list of pet id's
var slp = ledb.SoldPets.ToList().OrderBy(x => stp.IndexOf(x.petId));
}
答案 2 :(得分:1)
如果列表大小可以接受,您可以使用它:
using (ListDataContext syndb = new ListDataContext())
{
using (QueryDataContext ledb = new QueryDataContext())
{
var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
var slp = ledb.SoldPets.ToList().OrderBy(x => stp.IndexOf(x.petId));
// do something with the query
}
}