在问这个简单的问题之前我做了一些研究,但仍然无法使它工作......
下面是我的对象类和我的LINQ查询
public class ItemGridViewModel: IEqualityComparer<ItemGridViewModel>
{
public ItemGridViewModel() { }
public int ItemID { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public decimal Qty { get; set; }
public bool Equals(ItemGridViewModel x, ItemGridViewModel y)
{
return x.ItemID == y.ItemID;
}
public int GetHashCode(ItemGridViewModel obj) { return obj.ItemID; }
}
Run Code Online (Sandbox Code Playgroud)
var query = (from ccp in CostCenterParaQuery
where ccp.CostCentreID != null && costCenterList2.Contains(ccp.CostCentreID.Value)
select ccp into g
from s in StoreRoomQuery
where s.CostCentreCode == g.CostCentreCode
select s into g2
from b in BinItemStatQuery
where b.Qty > 0 && b.IsFrozen == "N" && b.StoreroomID == g2.StoreroomID
select b into g3
from i in ItemsQuery
where ((i.ItemID == g3.ItemID) &&
(whereClause.Code == null || i.ItemCode == whereClause.Code) &&
(whereClause.Description == null || i.Description == whereClause.Description))
select new ItemGridViewModel()
{
Qty = g3.Qty,
Code = i.ItemCode,
Description = i.Description,
ItemID = i.ItemID
}).Distinct();
Run Code Online (Sandbox Code Playgroud)
但结果集显然ItemGridViewModel与具有相同ItemID的几个重复...
可能的原因是什么?如何解决?
你已经在你的网站中实现了错误的界面ItemGridViewModel.根据用途,我想你想要IEquatable<T>.
IEqualityComparer<T>用于构建一个单独的对象,其责任仅仅是比较类型的对象T:
public class ItemGridViewModel
{
// Your implementation
}
public class ItemGridViewModelEqualityComparer : IEqualityComparer<ItemGridViewModel>
{
public bool Equals(ItemGridViewModel a, ItemGridViewModel b)
{
return a.ItemID == b.ItemID;
}
public int GetHashCode(ItemGridViewModel o)
{
return o.ItemID.GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的不同呼吁是:
// rest of query
select new ItemGridViewModel()
{
// assignment
}).Distinct(new ItemGridViewModelEqualityComparer());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |