【发布时间】:2012-06-14 15:59:42
【问题描述】:
我有两个自定义类。
第一类包含基本数据:
public class Request
{
public Request(int lineID, string partNo, int qty, int reasonID, int typeID)
{
LineID = lineID;
PartNo = partNo;
Qty = qty;
ReasonID = reasonID;
TypeID = typeID;
}
public int LineID { get; private set; }
public string PartNo { get; private set; }
public int Qty { get; internal set; }
public int ReasonID { get; private set; }
public int TypeID { get; private set; }
}
第二个类包含这些Request对象的List,其签名如下:
public class Requests : IEnumerable<Request>
{
private List<Request> list;
public Requests()
{
list = new List<Request>();
}
public int Add(Request item)
{
if (item != null)
{
foreach (var x in list.Where(r =>
(r.LineID == item.LineID) &&
(r.PartNo == item.PartNo) &&
(r.ReasonID == item.ReasonID) &&
(r.TypeID == item.TypeID)))
{
x.Qty += item.Qty;
return list.IndexOf(x);
}
list.Add(item);
return list.Count - 1;
}
return -1;
}
// other code
}
我正在测试我的代码并添加项目正在将新项目放入列表中,但用于查找重复项的 LINQ 查询不起作用。
如果将 2 个相同的项目添加到列表中,我希望我的代码足够聪明,可以简单地更新数量,但它似乎不起作用。
有人能告诉我 LINQ 查询有什么问题吗?
【问题讨论】:
-
什么是RequestId?它没有在你的类中定义。
-
不是答案,但使用
foreach毫无意义,因为您在第一次迭代时返回。 -
-
我会让Request实现IEquatable
,并使用list.Contains(item)... -
@jp2code,但这似乎不是 Web 应用程序的问题。正如 Jon 所建议的那样,您不能创建一个简单的控制台应用程序来调用
Add方法并以这种方式传递一个副本并复制它吗?如果是这样,您可以发布该代码,我们可以尝试一下。
标签: c# visual-studio-2010 linq