我对这种类型的表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