2013-01-19 49 views
4

我正在写一个查询,返回需要来自两个表的数据的模型列表,我希望let关键字可以帮助我。我开始是这样的:在linq中使用let关键字来组合查询

var TheListOfModels = 
       let Data1 = (from a in MyDC.Table1 
           where .... 
           select new ObjectThatContainsData1() 
           { 

           }).ToList() 

       let Data2 = (from b in MyDC.Table2 
           where .... 
           select new ObjectThatContainsData2() 
           { 

           }).Tolist()     

       select new ObjectThatContainsBothData() 
       { 
        SomeProp1 = from p in Data1 
           select everything 

        SomeProp2 = from a in Data2 
           select everything 

       }).ToList() 

我不是如何进行和写入最终select语句从2项let条款的结果,而不是直接从表中选择太肯定。我正在写一个很好的起点的查询结构,还是应该以另一种方式写它?

谢谢。根据注释

编辑:定义表

表1看起来有点像这样:

​​

表2的样子说:

AppleID | UserID | HarvestDateTime | SomeOtherColumn 

我在寻找提取所有桃子和苹果到ObjectThatContainsBothData的列表中,并且where子句基本上存在以过滤HarvestDateTimeUserID

+1

这似乎是一个连接,在这里是适当的。也许接下来是某种集合操作。你能提供表格定义吗? – ChaosPandion

+0

@ChaosPandion:我做了编辑。我也想过使用一个连接,但是我没有找到任何连接。 – frenchie

+0

您是否需要通过UserID或HarvestDateTime对输出进行分组?我想你也可以减少到一个单一的对象,但你的例子告诉我你正在寻找按某种东西来分组输出。 – ChaosPandion

回答

3

看起来你试图将Linq查询语法应用于序数C#代码。只需创建您的对象并执行两个查询即可从两个属性中获取数据:

var result = new ObjectThatContainsBothData() 
      { 
       SomeProp1 = db.Peaches.Where(...).Select(...).ToList(), 
       SomeProp2 = db.Apples.Where(...).Select(...).ToList() 
      }; 
+1

啊酷!因为这避免了let子句或from子句,所以更清洁。感谢你的回答! – frenchie

+0

老实说,这是我的想法,但对@frenchie的意图只是有一丝怀疑。 – ChaosPandion