WCF 中的 LINQ 返回重复结果



我在 WCF 服务中有一个 LINQ 查询,该查询运行并返回我要查找的正确数量的结果,但重复第一个结果 25 次,而不是显示所有 25 条不同的记录。

奇怪的是,当我获取它从调试器生成的 SQL 查询并将其插入 SQL 管理工作室时,我得到了正确的结果。

我尝试刷新我从 edmx 查询的视图,并且尝试以几种不同的方式重写查询,但我开始没有想法。 我在下面包含了一些代码。任何建议都会有所帮助。谢谢!

try
{
using (Entities db = new Entities())
{
var qInventory = db.vw_Web_Store_Inventory_Live
.Where(qi => qi.Sku_Number == inputSKU)
.ToList();
resultPInventory.SKU = inputSKU;
resultPInventory.StoreInventory = new List<StoreItem>();
foreach (var qi in qInventory)
{
resultPInventory.StoreInventory.Add(new StoreItem
{
StoreNum = qi.Store_Number,
Quantity = qi.Curr_Inv
});
}
}
}
catch (Exception e)
{
log.Error("[" + e.TargetSite + "] | " + e.Message);
}
log.Info("ProductInventory(" + inputSKU + ") returned " + resultPInventory.StoreInventory.Count + " results");
return resultPInventory;

正如 Gert 在注释中的链接所指出的那样,有时如果主键设置不正确,或者数据库中有多个行没有唯一值,LINQ 可能会这样做。

此链接还显示了类似的问题。

除了使用更好的主/唯一键重写数据库列(尽管从长远来看会更好(之外,解决方案是匿名选择特定值(稍后您可以轻松分配它们(:

var qInventory = db.vw_Web_Store_Inventory_Live
.Where(qi => qi.Sku_Number == inputSKU)
.Select(qi => new { qi.Store_Number, qi.Curr_Inv })
.ToList();
resultPInventory.SKU = inputSKU;
resultPInventory.StoreInventory = new List<StoreItem>();
foreach (var qi in qInventory)
{
resultPInventory.StoreInventory.Add(new StoreItem
{
StoreNum = qi.Store_Number,
Quantity = qi.Curr_Inv
});
}

当然,如果您以后需要使用qInventory进行其他操作,这不是最好的方法。(在这种情况下,您可以选择更多字段(

PS,这是一种缩短代码的方法,但我不确定 LINQ to Entities 是否允许它,所以先测试一下:

resultPInventory.SKU = inputSKU;
resultPInventory.StoreInventory = db.vw_Web_Store_Inventory_Live
.Where(qi => qi.Sku_Number == inputSKU)
.Select(qi => new StoreItem { StoreNum = qi.Store_Number, Quantity = qi.Curr_Inv })
.ToList();

在添加变量之前将新的 StoreItem(( 分配给它。

最新更新