2012-08-07 46 views
0

我有以下几点:如何使用LINQ连接三个数据源?

var questions = questionService.Details(pk, rk); 
var topics = contentService.GetTitles("0006000") 
       .Where(x => x.RowKey.Substring(2, 2) != "00"); 
model = (
    from q in questions 
    join t in topics on q.RowKey.Substring(0, 4) equals t.RowKey into topics2 
    from t in topics2.DefaultIfEmpty() 
    select new Question.Grid { 
     PartitionKey = q.PartitionKey, 
     RowKey = q.RowKey, 
     Topic = t == null ? "No matching topic" : t.Title, 
     ... 

现在我需要添加以下内容:

var types = referenceService.Get("07"); 

哪里有questions.typetypes.RowKey

之间的联系是没有办法,我可以链接的方式这第三个数据源,并且如果在类型表中没有匹配的话,它会给出一条消息“No matching type”?我的问题是我只是不确定如何做下一个加入。

回答

0

我相信你可以加入的结果,先与第三数据源连接:

var questions = questionService.Details(pk, rk); 
var topics = contentService.GetTitles("0006000") 
       .Where(x => x.RowKey.Substring(2, 2) != "00"); 
var types = referenceService.Get("07"); 

model = (
    from q in questions 
    join t in topics on q.RowKey.Substring(0, 4) equals t.RowKey into topics2 
    from t in topics2.DefaultIfEmpty() 
    join type in types on q.type equals type.RowKey into types2 
    from type in types2.DefaultIfEmpty() 
    select new Question.Grid { 
     PartitionKey = q.PartitionKey, 
     RowKey = q.RowKey, 
     Topic = t == null ? "No matching topic" : t.Title, 
     Type = type == null ? "No matching type" : type.Title, 
     ... 
0
 var questions = questionService.Details(pk, rk); 
     var topics = contentService.GetTitles("0006000") 
         .Where(x => x.RowKey.Substring(2, 2) != "00"); 
     var types = referenceService.Get("07"); 
     model = (from q in questions 
      join t in topics on q.RowKey.Substring(0, 4) equals t.RowKey into topics2 
      from t in topics2.DefaultIfEmpty()) 
      select new Question.Grid { 
       PartitionKey = q.PartitionKey, 
       RowKey = q.RowKey, 
       Topic = t == null ? "No matching topic" : t.Title, 
       ... 
      }).Union 
      (from a in types 
      join q in questions on q.type equals a.RowKey 
      where a.ID != null 
      select new Question.Grid { 
        PartitionKey = q.PartitionKey, 
        RowKey = q.RowKey, 
        Topic = t == null ? "No matching topic" : t.Title, 
        ... 
      })