Tag: join

linq连接3个表或条件

我需要在LINQ中创建一个带有3个表和OR条件的语句。 我的函数接收一个整数,我们称之为intZ 。 我有3个表: tableA , tableB和tableC 。 tableA具有列int1 , int2和intB 。 intB与tableB相关。 问题: tableA int1或int2可以是intZ ,它必须与一个tableC记录匹配。 我需要OR条件,但我不知道在哪里放置它。 它是否在where子句中? 还是在equals子句中? 目前,我知道如何加入3张桌子,但条件是杀了我。 在linq中创建语句的两种方法有什么区别? 是否会对性能产生影响? 编辑:好的,现在我觉得它更清楚了。 intZ必须与intC的tableC相关,并且此数字可以是tableA int1或int2 。

.NET Linq加入

我在SQL中有2个表。 Table 1 Step Id Step Name Table 2 Profile Id Step Id Completed 即使表2中没有匹配,我也想返回以下结果: Results Table1.Step Id Table1.Step Name Table2.Profile Id Table2.Completed 我在SQL中执行此操作的方式如下: select * from [Table 1] t1 left join [Table 2] t2 on t1.Step Id = t2.Step Id 这产生了我期望的结果。 当我把它翻译成linq时: public static List GetStepCompletion(string category, string profileid) { List step = GetSteps(category); […]

在LINQ中加入匿名类型

我确实有2个c#声明表,它在程序创建期间初始化列。 我想基于其UserID和UserName加入此表。 我的代码如下 from nSJL in UserList.AsEnumerable() join SJL in UserListOnline.AsEnumerable() on new { nSJL.Field(“UserID”), nSJL.Field(“UserName”) } equals new { nSJL.Field(“UserID”), nSJL.Field(“UserName”) } into sjList 在这段代码中我得到了错误 无效的匿名类型成员声明符。 必须使用成员分配,简单名称或成员访问声明匿名类型成员。 无论如何加入匿名类型?

在连接两个表之后访问所有数据并使用linq对它们进行分组

我有两张桌子 TableA aId aValue TableB bId aId bValue 我想通过aId加入这两个表,然后从那里通过bValue它们进行分组 var result = from a in db.TableA join b in db.TableB on a.aId equals b.aId group b by b.bValue into x select new {x}; 我的代码无法识别组后的联接。 换句话说,分组工作,但连接不起作用(或者至少我无法弄清楚如何在连接后访问所有数据)。

如何在LINQ中通过索引连接两个集合

什么可能是LINQ等效于以下代码? string[] values = { “1”, “hello”, “true” }; Type[] types = { typeof(int), typeof(string), typeof(bool) }; object[] objects = new object[values.Length]; for (int i = 0; i < values.Length; i++) { objects[i] = Convert.ChangeType(values[i], types[i]); }

在nhibernate mvc c中加入两个表#

我使用主键和外键加入两个表。 我的桌子是 项目 ,列是: ItemId int主键, 名称 varchar, 价格浮动, CategoryID int外键, QtyInStock int 类别 ,列是: Id int pk, 类别 varchar, 名称 varchar 我想根据ID = categoryId选择Category 我正在使用NHibernate 4.03与xml配置文件。

在内存集合和EntityFramework之间加入

是否有任何机制可以在保留顺序的同时在内存中集合和entity framework之间进行JOIN。 我在想的是 var itemsToAdd = myInMemoryList.Join(efRepo.All(), listitem => listitem.RECORD_NUMBER, efRepoItem => efRepoItem.RECORD_NUMBER, (left, right) => right); 这给了我一个相当奇怪的标题“这个方法支持LINQ to Entities基础结构,而不是直接在你的代码中使用。” 错误。 当然,我可以用类似的东西迭代地做到这一点 foreach (var item in myInMemoryList) { var ho = efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER).FirstOrDefault(); tmp.Add(ho); } 但这是一个N + 1查询。 哪个是讨厌的,因为myInMemoryList可能非常大! Resharper可以为我重构 tmp = (from TypeOfItemInTheList item in myInMemoryList select efRepo.Where(h => h.RECORD_NUMBER == […]

C#DataTable内部联接与动态列

我试图以与此问题类似的方式将两个DataTable连接在一起: C#中DataTables的内部联接 我正在尝试将输出变为单个“组合”表,其中包含两个原始表中的列。 它们都有一个共同的日期戳列。 给出的答案适用于具有固定列的DataTables,但如果它们是动态创建的,并且可以包含任意数量的列,那么我该如何加入它们呢? 例如 T1 (datestamp, t1Column1, t1Column2, t1ColumnN…) T2 (datestamp, t2Column1, t2Column2, t2ColumnN…) 我想加入以创建以下内容: J1 (datestamp, t1Column1, t1Column2, t1ColumnN, …, t2Column1, t2Column2, t2ColumnN…) 这可能吗?

地址匹配密钥算法

我有两个单独的表中的地址列表,略微偏离我需要能够匹配。 例如,可以通过多种方式输入相同的地址: 110 Test St 110 Test St. 110 Test Street 虽然简单,但你可以想象更复杂的场景中的情况。 我正在尝试开发一种能够将上述地址作为关键字匹配的简单算法。 例如。 关键可能是“11TEST” – 110的前两个,测试的前两个和街道变体的前两个。 完整匹配键也将包括前5个邮政编码,因此在上面的示例中,完整键可能看起来像“11TEST44680”。 我正在寻找有效的算法或资源的想法,我可以在开发时考虑这些因素。 任何想法都可以是伪代码或您选择的语言。 我们只关心美国的地址。 事实上,我们只查看来自俄亥俄州和密歇根州的250个邮政编码的地址。 我们也无法访问任何邮政软件,尽管对于具有成本效益的解决方案的想法是开放的(它基本上是一次性使用)。 请注意,这是来自政府来源的初始数据转储,因此有关用户如何清理它的建议对我构建应用程序很有帮助,但我希望能够将地址匹配为最佳状态。尽可能好。

如何使用LINQ执行动态连接

我有两个系列。 每个集合都包含特定类型的实例。 我需要使用每个集合中实例的一个属性来连接这两个集合。 问题是我将在运行时才知道要用于连接的属性。 那么如何为动态Join编写LINQ查询呢? 这是带有静态连接的LINQ查询的代码。 在下面的示例代码中,您将注意到我正在使用MyTran.MyAmountUSD = YourTran.YourAmountUSD加入两个集合。 但在实际情况中,我将知道在运行时仅使用哪个属性进行连接。 所以有时我可能需要加入MyTran.MyAmountGBP = YourTran.YourAmountGBP。 class MyTran { public int Id { get; set; } public double MyAmountUSD { get; set; } public double MyAmountGBP { get; set; } } class YourTran { public int Id { get; set; } public double YourAmountUSD { get; set; } […]