我在這裏有一個問題比我前幾天想解決的有點複雜。我使用的是PetaPoco ORM,並沒有發現任何其他方式做這樣一個複雜的查詢:刪除C#中的列表<String[]>中的重複項目
var data = new List<string[]>();
var db = new Database(connectionString);
var memberCapabilities = db.Fetch<dynamic>(Sql.Builder
.Select(@"c.column_name
,CASE WHEN c.is_only_view = 1
THEN c.is_only_view
ELSE mc.is_only_view end as is_only_view")
.From("capabilities c")
.Append("JOIN members_capabilities mc ON c.capability_id = mc.capability_id")
.Where("mc.member_id = @0", memberID)
.Where("c.table_id = @0", tableID));
var roleCapabilities = db.Fetch<dynamic>(Sql.Builder
.Select(@"c.column_name
,CASE WHEN c.is_only_view = 1
THEN c.is_only_view
ELSE rc.is_only_view end as is_only_view")
.From("capabilities c")
.Append("JOIN roles_capabilities rc ON c.capability_id = rc.capability_id")
.Append("JOIN members_roles mr ON rc.role_id = mr.role_id")
.Where("mr.member_id = @0", memberID)
.Where("c.table_id = @0", tableID));
我試圖獲取用戶的能力,但我的系統實際上得的方式來分配用戶的能力,或者直接指向該用戶或將用戶附加到角色。我想使用存儲過程得到這個合併列表,但我需要遊標,我想也許應該更容易,更快速地在Web應用程序上執行此操作。所以我得到了這兩種動態和成員能力對角色能力的優先權,所以我需要檢查是否使用循環。我的確如此:
for (int i = 0; i < roleCapabilities.Count; i++)
{
bool added = false;
for (int j = 0; j < memberCapabilities.Count; j++)
if (roleCapabilities[i].column_name == memberCapabilities[j].column_name)
{
data.Add(new string[2] { memberCapabilities[j].column_name, Convert.ToString(memberCapabilities[j].is_only_view) });
added = true;
break;
}
if (!added)
data.Add(new string[2] { roleCapabilities[i].column_name, Convert.ToString(roleCapabilities[i].is_only_view) });
}
所以現在計劃刪除重複的條目。我嘗試使用以下方法,但沒有結果:
data = data.Distinct();
任何幫助?後鮮明的()謝謝
完美!這對我的情況感謝:) – vcliment89 2012-02-09 00:57:16