1

今天我问了这个问题,但我错过了一些在这个问题中描述得更多的东西。

我有三张桌子:

[Table1]
 - ID // Unique
 - Name
 - Location
 - Country

[Table2]
 - ID - Unique
 - Table1.ID
 - Value

[Table3]
 - Table2.Value
 - LN
 - Name

关系:

一个 Table1.ID 到多个 Table2.Table1.ID

我需要的是 ling-to-sql 查询,其中会得到类似的结果

  1. 从 Table1 中获取所有内容
  2. 对于 Table2.Table1.ID 中的所有 Table1.ID,将 Table2.Value 作为数组 (int)
  3. 对于所有 Table2.value as array(int),获取数组字符串 Table3.Name 其中 Table2.Value 等于 Table3.Table2.Value 并且 LN = "en"

例子:

表格1

 ID |  Name    |  Location    |   Country   |
  1 | TestName | TestLocation | SomeCountry |

表2

 ID  |  FK | Val |
  1  |  1  |  5  | 
  2  |  1  |  7  |

表3

Val | Ln |  Name     |
  5 | en | Testname1 |
  7 | en | Testname2 |

结果:

1,TestName,TestLocation,SomeCountry,List<string>{Testname1,Testname2}

我的 ling to sql 查询只得到 Table2.Value 作为 List,也许你可以做一些修改。

 var result = (from t1 in context.Table1

              select new CLASS
              {
                  ID = t1.ID,
                  NAME = t1.Name,
                  LOCATION = t1.loc,
                  COUNTRY = t1.Country,
                  CategoryArray = new List<int>(t1.Tabel2.Select(p => p.CategoryID).ToArray())

              }).Take(10).ToList();

ASP.NET C# 4.0 LINQ TO SQL

4

3 回答 3

2

你需要一个子查询;尝试这个:

{
    ID = t1.ID,

    NAME = t1.Name,

    LOCATION = t1.loc,

    COUNTRY = t1.Country,

    CategoryArray = (from t3 in Table3
                     where t2.Value == t3.Value && t3.Ln == "en"
                     select t3.Name).ToList()
}

如果在 CLASS 对象模型中您将 CategoryArray 定义为,List<int>那么您需要使用.ToList()而不是.ToArray()

我没有发现这很清楚:“对于所有 Table2.value 作为数组(int),获取数组字符串 Table3.Name 其中 Table2.Value 等于 Table3.Table2.Value 和 LN =“en”不确定您是否还需要一个与 Table1 加入子查询。

于 2012-05-06T22:16:18.877 回答
0

也许在这个例子中多连接会起作用?

我想到了这些方面的一些事情:

 var result =   from a in table1
                join b in table2 on a.id equals b.table1id
                join c in table3 on b.value equals c.table2value
                select new {Value = b.value, Name = c.Name}

我不确定您希望按什么对结果进行分组 - 但如果上述方法有效,那么您可以按值或 id 进行分组以获取名称列表。
但是,如果没有数据,要对此进行测试并不容易。

编辑:

如果您对帖子中的查询感到满意,那么要获取与 CategoryArray 中的所有值关联的所有名称的列表,您可以尝试以下查询:

var res = table3
            .Where(c => CategoryArray.Contains(c.table2value))
            .Select(c => c.Name)
            .ToList();
于 2012-05-07T08:08:57.673 回答
0

你也可以这样:

public List<string> GetClientImagePath()
        {
            //return objDAL.GetClientImagePath();
            List<string> clientimagepath = new List<string>();
            DataSet ds = new DataSet();

            try
            {
                ds = objDAL.GetClientImagePath();
                if (ds.Tables.Count > 0)
                {
                    ds.Tables[0].TableName = "clientimagepath";
                    clientimagepath = (from DataRow dr in ds.Tables["clientimagepath"].Rows
                                       select Convert.ToString(dr["ImagePath"])
                                        ).ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return clientimagepath;
        }
于 2018-11-22T11:30:41.033 回答