本文介绍了需要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
推荐答案
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查询复杂情况的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!