0

我有 2 个数据库表。一种是主记录,另一种是使用字典结构的详细记录。

我想从详细信息表中查询一些字段,这些字段返回具有所有相同标题 ID 的多行。

有没有办法使用 linq 连接两个表来创建自定义记录

例子

主表:ID MasterName Date ...

明细表 ID MasterID 键值

伪代码:从 master in context.mastertable 加入细节在 context.detailstable on master.ID == detail.masterID SELECT new CustomClass{ ID = master.ID, Name = master.MasterName Customfield = (detailsvalue.where key == "customfield ") + (detailvalue.where key == "customfield2") };

希望可以有人帮帮我。

格茨·卢克·克里宁

4

2 回答 2

1

您可以使用在 Join() 方法中创建的匿名类型。

  List<Master> list1 = new List<Master>(){
    new Master(){ Id=1, Name="Name1"},
    new Master(){ Id=2, Name="Name2"}};

  List<Detail> list2 = new List<Detail>(){
    new Detail(){ Id=1, MasterId=1, Description="Description1"},
    new Detail(){ Id=2, MasterId=1, Description="Description2"},
    new Detail(){ Id=3, MasterId=1, Description="Description3"},
    new Detail(){ Id=4, MasterId=2, Description="Description4"},
    new Detail(){ Id=5, MasterId=2, Description="Description5"}};

  // IEnumerable of anonymous types
  var result = list1.Join(list2, m => m.Id, d => d.MasterId, (m, d) => new { Id = m.Id, Name = m.Name, Description = d.Description });

  foreach (var item in result)
    Console.WriteLine(item.Id + " " + item.Name + " " + item.Description + Environment.NewLine);

  // Returns
  // 1 Name1 Description1
  // 1 Name1 Description2
  // 1 Name1 Description3
  // 2 Name2 Description4
  // 2 Name2 Description5
于 2012-11-21T23:41:24.790 回答
0

像这样的东西不会起作用吗?:

var query = from master in context.masterTable
            join detail in context.detailTable
            on master.Id == detail.masterId
            where detail.Key == "customField" || detail.Key == "customField2"
            select new
            {
                id = master.Id,
                name = master.Name,
                customField = detail.Key
            };

如果没有,请详细说明您正在寻找什么。IE 描述你的数据是如何存储的,以及你希望从这个查询中得到的最终结果。

于 2012-11-21T23:29:28.173 回答