日期:2014-05-20  浏览次数:20731 次

求一条linq查询语句。
评分系统,查询6月到8月所有的评分信息,包括未评或已评分数。

环境

Table1              Table2
Name                 Name  Month   Score
-----------         --------------------- 
A                   A        8      35
B                   B        8      45
C                   C        8      54
                    C        7      78

期望的查询结果:
Name Month  Score
A     6      NA
A     7      NA
A     8      35
B     6      NA
B     7      NA
B     8      45
C     6      NA
C     7      78
C     8      54

注:已评分的显示分数,没有评分的显示“NA”。

不知道说清楚没,对linq不是很了解。
------解决方案--------------------
本帖最后由 q107770540 于 2012-09-19 22:57:57 编辑
var ay=new int[]{6,7,8};

var query=from t1 in Table1
          join t2 in Table2.Where(s=>ay.Contains(s.Month))
          on t1.Name equals t2.Name into t
          from t2 in t.DefaultIfEmpty()
          from x in ay 
          orderby t2.Name,t2.Month
          select new Table2
           {
             Name=t1.Name,
             Month=x,
             Score=t2==null?"NA":t2.Score
           };

------解决方案--------------------
楼上好像不对呀。

以下是我的,替换成Table1 和 Table2就可以了。

class CJoin
{
    class T
    {
        public string Name { get; set; }
        public int Month { get; set; }
        public string Score { get; set; }