0

这是我的数据库表中的数据:

在此处输入图像描述

那是我的业务对象:

public class Unit
    {
        public Unit()
        {
            MemberIdList = new List<String>();
        }

        public String UnitType { get; set; }
        public String UnitZoom { get; set; }
        public String MemberZoom { get; set; }

        public List<String> MemberIdList { get; set; }
    }

从数据库中提取全部数据并将其放入 DataTable 中。

现在来了 Linq 转换......

在我返回一个包含 3 个 Unit 对象的列表后,这些对象包含这些数据:

在此处输入图像描述

现在猜猜我是如何将数据放入 3 个业务对象中的……这就是我想知道的方式。三个属性的提示可能是 Distinct 和 IEqualityComparer ......只是一个假设......

更新

问题更新:

请阅读代码中的注释:)

var groupedCollection = table.AsEnumerable()
                                    .GroupBy(row => new
                                    {
                                        UType = row.Field<string>("UnitType"),
                                        UZoom = row.Field<string>("UnitZoom"),
                                        MZoom = row.Field<string>("MemberZoom"),
                                        MOrder = row.Field<int>("MemberOrder"), 

// 我不希望 MemberOrder 在组键中,但后来我使用这个属性来排序... });

            var unitCollection = groupedCollection
                                .Select(g => new Unit 
                                {
                                    UnitType = g.Key.UType,
                                    UnitZoom = g.Key.UZoom,
                                    MemberZoom = g.Key.MZoom,                                   
                                    MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList(),
                                });

            List<Unit> units = unitCollection.ToList(); 
4

3 回答 3

1

我会这样做:

var values = TblMembers.ToList();

var lst = 
    (from m in values
    group m by new { m.UnitType, m.UnitZoom, m.MemberZoom } into g
    select new
    {
        g.Key.UnitType,
        g.Key.UnitZoom,
        g.Key.MemberZoom,
        MemberIdList = g.Select (x => x.MemberID).ToList()
    }).ToList();
于 2011-06-08T20:56:55.047 回答
0
var result =
        from n in data
        group n by new { n.UnitType, n.UnitZoom, n.MemberZoom } into g
        select new Unit 
        { 
          UnitType = g.Key.UnitType, 
          UnitZoom = g.Key.UnitZoom, 
          MemberZoom = g.Key.MemberZoom , 
          MemberIdList = g.Select ( r => r.MemberId).ToList() 
        };
于 2011-06-08T20:57:37.017 回答
0

像这样的东西?

DataTable dt = ...

var list = 
dt.AsEnumerable()
.GroupBy(r => new
{
    UType = r.Field<string>("UnitType"),
    UZoom = r.Field<string>("UnitZoom"),
    MZoom = r.Field<string>("MemberZoom")
})
.Select(g => new Unit 
{ 
    UnitType = g.Key.UType, 
    UnitZoom = g.Key.UZoom, 
    MemberZoom = g.Key.MZoom ,
    MemberIdList = g.Select(r => r.Field<string>("MemberId")).Distinct().ToList()
})
.ToList();

编辑:
调用.Distinct()不是绝对必要的。如果您可以拥有它们,它会避免重复的 MemberId,但这实际上取决于 OP 的需求。

EDIT2:(
根据最后一个问题更新)

您已接近解决方案:

只需更改我的代码的这一行:

MemberIdList = g.Select(r => r.Field<string>("MemberId")).ToList()

到:

MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(r => r.Field<int>("MOrder")).ToList()
于 2011-06-08T20:59:45.420 回答