我有这个问题:
var query = (from tables ...
where ...
select new
{
ClientName = ClientName,
ClientNumber = ClientNumber,
ClientProduct = ClientProduct
}).Distinct();
返回包含3个值的行。 ClientName和ClientNumber可以链接到多个产品。
所以我们可以:
NameA NumberA Product1
NameA NumberA Product2
NameA NumberA Product3
NameB NumberB Product4
NameC NumberC Product5
我想知道是否可以将其存储在某个类的列表中,如下所示:
class MyClass
{
string ClientName,
int ClientNumber,
List<int> ClientProducts
}
因此没有ClientName和ClientNumber的重复。
提前谢谢你。
答案 0 :(得分:1)
使用此类结构来表示您的数据:
class MyClass
{
public string ClientName { get; set; }
public int ClientNumber { get; set; }
public List<int> ClientProducts { get; set; }
}
class Procuct
{
public string ClientName { get; set; }
public int ClientNumber { get; set; }
public int ProductID { get; set; }
}
和这个测试数据:
List<Procuct> Products = new List<Procuct>()
{
new Procuct() { ClientName = "A", ClientNumber = 1, ProductID = 1},
new Procuct() { ClientName = "A", ClientNumber = 1, ProductID = 2},
new Procuct() { ClientName = "A", ClientNumber = 1, ProductID = 3},
new Procuct() { ClientName = "B", ClientNumber = 2, ProductID = 4},
new Procuct() { ClientName = "C", ClientNumber = 2, ProductID = 5}
};
您可以使用以下linq查询:
var q = from p in Products
group p by new
{
cName = p.ClientName,
cNumber = p.ClientNumber
} into pGroup
select new MyClass
{
ClientName = pGroup.Key.cName,
ClientNumber = pGroup.Key.cNumber,
ClientProducts = pGroup.Select(x => x.ProductID).ToList()
};
获得您想要的内容,即MyClass
个对象的集合。
上述linq查询中执行的 分组 基本上保证(ClientName, ClientNumber)
上不会有重复项。
答案 1 :(得分:1)
由于您提到Linq-to-sql,很可能您的客户实体已经链接了产品。您可能会寻找一个过于复杂的解决方案。
这取决于你的外键结构,但是如果你的数据模型是 客户端有1个多产品,并且您已经存在从产品到客户端的外键。
所以你可以参考client.Products
。
所以在你的情况下,它将是
var query = (from Clients...
where ...
select new
{
ClientName = Client.ClientName,
ClientNumber = Client.ClientNumber,
ClientProduct = Client.Products.Select(s=>s.id).ToList()
});
但您也可以简单地使用您的客户实体加载产品。
这完全取决于您的数据模型+正确的外键结构 如果您的客户端和产品之间有许多关联,例如每个客户端的产品,则可以从该实体开始。看看这个文档 - 它为Linq-2-sql提供了一个很好的起点。 http://weblogs.asp.net/scottgu/using-linq-to-sql-part-1
答案 2 :(得分:0)
我解决了同样的问题,我认为对你有用 只检查 Where 条件是否正确 谢谢......
var query = (from tables ...
where ...
select new
{
ClientName = ClientName,
ClientNumber = ClientNumber,
ClientProduct = ClientProduct.ToList()
}).Distinct();