Re: [问题] 指定Datatable几行的某个字段塞入某值...

楼主: fo40225   2015-08-29 23:44:53
※ 引述《don750421 (1+1≠2)》之铭言:
: 因为需要把以上的资料存入DB,所以原本的想法是....
: ...
: 但是,想问问有没有其他快速的方式...?
: 例如,可以指定DataTable Row0~Row3 的 地区字段 等于 Kaohsiung ...之类的方式...
: 或许可以透过LINQ or Lambda ?
: 请各位前辈赐教..谢谢
稍微想了一下 发现这事情用LINQ不会比较简单
如果不是functional programming的信徒的话
建议还是用一步一步慢慢做的方式 比较好懂 好维护
以下程式码
failData是失败的资料
SuccessGroupData.towns Key是PK Value是地名
SuccessGroupData.IDs Key是FK 对应到towns的PK Value是资料
static void Main(string[] args)
{
string data = @"
S124452984
A123408743
B342423424
Kaohsiung
G324234503
Tainan
E342542543
O325405453
R324329842
Taitung
Taitung
S324325325
Q308956456
Y324234234
W453534534";
var datas = data.Split(new[] { Environment.NewLine },
StringSplitOptions.RemoveEmptyEntries);
var q = datas.Aggregate(new
{
temp = new LinkedList<string>(),
groupData = new Dictionary<string, List<string>>()
}, (a, b) =>
{
if (b.Length == 10)
{
a.temp.AddLast(b);
}
else
{
List<string> ID;
if (a.groupData.TryGetValue(b, out ID))
{
ID.AddRange(a.temp);
}
else
{
a.groupData.Add(b, a.temp.ToList());
}
a.temp.Clear();
}
return a;
}, x => new
{
failData = x.temp.ToList(),
SuccessGroupData = Enumerable.Range(1, x.groupData.Count)
.Zip(x.groupData, (townPK, groupData) => new
{
townPK,
groupData
}).Select(y => new
{
town = new KeyValuePair<int, string>
(y.townPK, y.groupData.Key),
IDs = y.groupData.Value
.Select(ID => new KeyValuePair<int, string>(y.townPK, ID))
}).Aggregate(new
{
towns = new Dictionary<int, string>(),
IDs = new List<KeyValuePair<int, string>>()
}, (a, b) =>
{
a.towns.Add(b.town.Key, b.town.Value);
a.IDs.AddRange(b.IDs);
return a;
})
});
foreach (var item in q.failData)
{
Console.WriteLine(item);
}
foreach (var item in q.SuccessGroupData.IDs)
{
Console.WriteLine(item.Key.ToString() + ":" + item.Value);
}
foreach (var item in q.SuccessGroupData.towns)
{
Console.WriteLine(item.Key.ToString() + ":" + item.Value);
}
}
写到这么复杂有可能是我FP的功力不足
我如果在工作的code里看到这种程式码应该会崩溃

Links booklink

Contact Us: admin [ a t ] ucptt.com