我對這種類型的表codelistvalueview條目:LINQ的GroupBy用在哪裏
我想通過命名空間組,也許再由表名,並找出所有的只發生在條目均命名空間(UPD/REFDAT)然後列出出現在UDP中的那些,以便它們可以被刪除。
namespace tableid tablename count
UDP 1C06F2EF-5371-4A3F-A07C-226DB7242053 WeldingProcedureSpecification 34
REFDAT 42D225CA-A96B-4806-9C5C-86D2B3B3AFEE WeldingProcedureSpecification 2
REFDAT EA0F846C-59B4-4F6D-91D1-B00698C98349 WeldClass 5
REFDAT E8516DFC-9980-4CBC-B62C-D2C11618424E WasherType 14
在上述情況下,我需要從第一行中的唯一TABLEID因爲這兩個1 & 2行中出現。我需要的值是,以UDP作爲命名空間的行的tableid(本例中爲第一行)
我認爲這(下面)會讓我得到我想要的,但我得到了一些空行??
var grp = CodelistValueView.Where(x=>x.Namespace=="UDP" || x.Namespace=="REFDAT")
.GroupBy(x=>new {x.Namespace, x.TableID, x.TableName},
x=>new {x.Namespace, x.TableID, x.TableName, x.ShortStringValue})
.OrderByDescending(g=>g.Key.TableName)
.Select(g=>g.Where(x=>x.Namespace=="UDP").First());
grp.Dump();
這是我所看到的...
null
null
UDP 1c06f2ef-5371-4a3f-a07c-226db7242053 WeldingProcedureSpecification GTAW, SA-789
null
有什麼想法?
我終於想出了這一點,似乎工作...不知道這是否是做到這一點的最好辦法。
var grp = CodelistValueView.Where(x=>x.Namespace=="UDP" || x.Namespace=="REFDAT")
.Select(x=>new {NS=x.Namespace, Tablename=x.TableName, TableId=x.TableID})
.GroupBy(g=> new {g.NS, g.Tablename, g.TableId}, (g,x)=>g)
.GroupBy(x=>x.Tablename, x=>x)
.Where(x=>x.Count() > 1)
.Select(x=>x.Where(a=>a.NS=="UDP").First())
.OrderBy(x=>x.Tablename);
而且我得到這個:
NS Tablename TableId
UDP ValveFlowPattern 64bd5be2-0ddb-495a-a0db-28476ebe858d
UDP ValveOperatorPartDataBasis dcdb1f66-83f1-4738-8587-49a72c63801d
UDP ValvePortOption 99b1797c-4712-410a-8578-d4a6a01e8968
UDP WeldingProcedurePractice 682bcc0b-db7a-4b10-80ba-1f969b96abfe
UDP WeldingProcedureSpecification 1c06f2ef-5371-4a3f-a07c-226db7242053
感謝 蘇尼特
所以你問這裏的兩個查詢? – Stu 2009-12-07 17:11:29
我不確定。我需要列出出現在UPD中的那些當且僅當它們也出現在REFDAT中。 – Sunit 2009-12-07 17:17:43
請問你能更清楚的問題嗎?你想查找名稱空間中的記錄還是僅在UDP名稱空間中的記錄?對不起,我沒有正確理解你的問題 – 2009-12-07 17:19:17