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