0

我的模型中有两个视图。

我基本上需要根据三列对它们进行 INNER JOIN:

  • 数据源
  • 节目编号
  • 剧集ID

我不知道如何做的第一件事是将 SQL“AND”运算符添加到 LINQ 表达式。

第二件事是,我不知道如何选择已加入的表。

有人可以帮帮我吗?

var query = (from s in db.TVData_VW_ShowList 
                         from z in db.TVData_VW_Schedule
                         where s.dataSource = z.dataSource
                         && s.ShowID = z.ShowID
                         && s.EpisodeId = z.EpisodeId select ...
4

3 回答 3

1

您可以在这里使用匿名类型来发挥自己的优势,既可以跨多个列连接,也可以投影到包含来自连接两侧的数据的新类型。这是一个使用 Linq to 对象的工作示例:

namespace LinqExample
{
    class Program
    {
        static void Main()
        {
            var Shows = new List<ShowData> { new ShowData { dataSource = "foo", EpisodeID = "foo", ShowID = "foo", SomeShowProperty = "showFoo" }};
            var Schedules = new List<ScheduleData> { new ScheduleData { dataSource = "foo", EpisodeID = "foo", ShowID = "foo", SomeScheduleProperty = "scheduleFoo" } };

            var results =
                from show in Shows
                join schedule in Schedules
                    on new { show.dataSource, show.ShowID, show.EpisodeID }
                    equals new { schedule.dataSource, schedule.ShowID, schedule.EpisodeID }
                select new { show.SomeShowProperty, schedule.SomeScheduleProperty };

            foreach (var result in results)
            {
                Console.WriteLine(result.SomeShowProperty + result.SomeScheduleProperty); //prints "showFoo scheduleFoo"
            }

            Console.ReadKey();
        }
    }

    public class ShowData
    {
        public string dataSource { get; set; }
        public string ShowID { get; set; }
        public string EpisodeID { get; set; }
        public string SomeShowProperty { get; set; }
    }

    public class ScheduleData
    {
        public string dataSource { get; set; }
        public string ShowID { get; set; }
        public string EpisodeID { get; set; }
        public string SomeScheduleProperty { get; set; }
    }
}
于 2013-06-12T18:51:18.830 回答
0

所以加入你可以使用join关键字然后使用on来指定条件。&&(C# 中的逻辑和运算符)将被转换为 SQLAND关键字。

此外,在 EF 中,它们具有所谓的“隐式连接”,这意味着如果我的 TableA 具有指向 TableB 的外键,则将其称为 fKey。

在哪里做TableA.fKey == TableB.pKey会导致提供者在那里加入。要选择你只需要做;

select new { prop1 = TableA.Prop1, prop2 = TableB.Prop1 }

这将创建一个从两个表中选择值的新匿名。

下面是一个更完整的join语法示例。我认为它使用了您询问的所有内容;

var result = from a in TableA
             join b in TableB on a.fKey equals b.pKey && b.Status equals 1
             select new { a.Prop1, a.Prop2, b.Prop1 };
于 2013-06-12T18:28:39.423 回答
-1

首先,您需要创建一个包含两个视图的列的辅助类,例如:

public class viewItem 
{
   public int ShowID { get; set; }
   public int EpisodeID { get; set; }
   public int dataSource { get; set; }
   ...
}

那么您的 linq 查询将是:

var query = (from s in db.TVData_VW_ShowList
             join z in db.TVData_VW_Schedule 
             on s.dataSource equals z.dataSource
             where s.ShowID == z.ShowID
             && s.EpisodeID == z.EpisodeID
             select new viewItem {
                ShowID = s.ShowID,
                EpisodeID = s.EpisodeID,
                dataSource = s.dataSource,
                ...
             }
于 2013-06-12T18:32:56.033 回答