读书人

求1lambda表达式

发布时间: 2012-12-26 14:39:29 作者: rapoo

求一lambda表达式
数据表结构如下图:一个Patient有多个ClinicalCase,一个ClinicalCase有多个Sample,一个Sample有多个SampleCustomTableRecord
求1lambda表达式

下面是SampleCustomTableRecords的一些数据:
IDRecordIndex...FK1FK2SampleID
11NULLNULLNULLNULL731311
21NULLNULLNULLNULL741631
31NULLNULLNULLNULL751691
41NULLNULLNULLaaa 76NULL1
52NULLNULLNULLNULL731321
62NULLNULLNULLNULL741671
72NULLNULLNULLNULL751711
82NULLNULLNULL76NULL1
93NULLNULLNULLNULL731311
103NULLNULLNULLNULL741631
113NULLNULLNULLNULL751711
123NULLNULLNULLNULL76NULL1
------------------------------------------
现在我想选出这样一些Samples(或ClinicalCases, 或Patients):
RecordIndex相同的(condition1):FK1=73 and FK2=131 和 (condition2):FK1=75 and FK2=169。
由于condition有可能有很多,中间都是And关系,我想用动态创建Expression的方法实现。现在就是这个Expression不会写。难点是RecordIndex要相同,在SQL中可以用表自己join自己来实现。可怎么翻译成linq呢?如果能直接给出lambda表达式将不胜感激。



[解决办法]
.Where<T>(Predicate) 是延迟执行的,可以利用它来拼凑多个条件
[解决办法]
Expression<Func<TData, bool>> w = (data) => true;
w = (data) => w(data) && data.a == aaa; // where a = aaa
w = (data) => w(data) && data.b == bbb; // where a = aaa and b = bbb
w = (data) => w(data)
[解决办法]
data.c == ccc; // where (a = aaa and b = bbb) or c = ccc
...
var query = from x in datasource where w(x);
[解决办法]

引用:
在SQL中可以用表自己join自己来实现。可怎么翻译成linq呢?


var query=from  a in SampleCustomTableRecords
join b in SampleCustomTableRecords
on a.RecordIndex equals b.RecordIndex
where a.FK1==73 && a.FK2==131 && b.FK1==74 && b.FK2=163
select a;

[解决办法]
var query = ...
...
query = from x in query
join y in anothertable
on x.xxx equals y.yyy
select xxx;

读书人网 >.NET

热点推荐