需要linq查询复杂情况 [英] Need a linq query for the complex situation

查看:92
本文介绍了需要linq查询复杂情况的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个场景。我的桌子由三个小组组成。对于每个条目,必须有两行类型ID不同。



Hi I have a scenario. My table consists of three cols. For every entry there must be two rows with type id different.

GrpId    type id       entryID
------------------------------
10         1           1
-1         2           1
11         1           2
12         2           2
10         1           3
-1         2           3
10         1           4
-1         2           4
23         1           5
-1         2           5
24         1           6
-1         2           6
10         1           7
-1         2           7
10         1           8
-1         2           8





我需要一个linq查询

我有两个条件

当类型id应该是1而grpid应该是10得到条目id

结果应该是那个条目id我需要grp id -1并输入id 2



结果应该是:





I need a single linq query
I have two conditions
when type id should be 1 and grpid should be 10 get entry id
result should be for that entry id i need grp id -1 and type id 2

Result should be:

GrpId    type id       entryID
------------------------------
-1         2           1
-1         2           3
-1         2           4
-1         2           7
-1         2           8





我尝试了什么:



我尝试过分组,但有些地方但没有工作



What I have tried:

I tried group by and some where but didn't work

推荐答案

看看例子:



Take a look at example:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("GrpId", typeof(int)));
dt.Columns.Add(new DataColumn("type id", typeof(int)));
dt.Columns.Add(new DataColumn("entryID", typeof(int)));

dt.Rows.Add(new object[]{10, 1, 1});
dt.Rows.Add(new object[]{-1, 2, 1});
dt.Rows.Add(new object[]{11, 1, 2});
dt.Rows.Add(new object[]{12, 2, 2});
dt.Rows.Add(new object[]{10, 1, 3});
dt.Rows.Add(new object[]{-1, 2, 3});
dt.Rows.Add(new object[]{10, 1, 4});
dt.Rows.Add(new object[]{-1, 2, 4});
dt.Rows.Add(new object[]{23, 1, 5});
dt.Rows.Add(new object[]{-1, 2, 5});
dt.Rows.Add(new object[]{24, 1, 6});
dt.Rows.Add(new object[]{-1, 2, 6});
dt.Rows.Add(new object[]{10, 1, 7});
dt.Rows.Add(new object[]{-1, 2, 7});
dt.Rows.Add(new object[]{10, 1, 8});
dt.Rows.Add(new object[]{-1, 2, 8});

//get entries
var entries = dt.AsEnumerable()
	.Where(x=>x.Field<int>("GrpId")==10)
	.Select(x=>x.Field<int>("entryID"))
	.ToList();
//get result
var result = dt.AsEnumerable()
	.Where(x=> x.Field<int>("GrpId")==-1 && 
			x.Field<int>("type id")==2 && 
			entries.Any(y=>y==x.Field<int>("entryID")))
	.ToList();





祝你好运!



Good luck!


这篇关于需要linq查询复杂情况的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆