gpt4 book ai didi

c# - 使用 LINQ-to-Entities 返回一个对象集合,其中一个对象属性与另一个对象集合中的任何属性匹配

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:22 24 4
gpt4 key购买 nike

我一直在搜索,但找不到解决这个问题的方法...

我有一个 EntityCollectionCommunication每个对象都有一个 Intention 的实例对象(一对一)。

我还有一个 User具有许多 UserLocation 实例的对象EntityObjects (一对多)

  • Intention对象有一个属性 UID .
  • UserLocation对象有一个属性 LID .

  • 我想编写一个返回所有 Communication 的 LINQ 表达式UID 所在的对象Intention 的属性(property)关联到 Communication 的实例对象等于任何 LID UserLocation 的任何实例的属性User 的实例对象。

我试过了

return _context.Communications.Where
(u => u.Intention.UID.Equals
(user.UserLocations.Select
(p => p.LID)));

还有这个

return _context.Communications.Where
(u => user.UserLocations.Any
(x => x.LID.Equals
(u.Intention.UID)));

还有这个

var thislist = from Intentions in _context.Intentions
join UserLocations in user.UserLocations
on Intentions.UID equals UserLocations.LID
select Intentions.UID;
return _context.Communications.Where(u => u.Intention.Equals(thislist.Any()));

还有这个

var lidlist = user.UserLocations.Select(x => x.LID);
return _context.Communications.Where(x=> lidlist.Contains(x.Intention.UID)).ToList();

(这让我在 Contains 语句上出错,说“Delegate System.Func<Communication,int,bool> does not take 1 argument”,不知道如何修复)

除了所有这些变体,我还有:

  • 修改我的方法以返回IQueryable<Communication>也试过List<Communication>同时附加 ToList()我的查询。

没有任何作用。无论我尝试什么,我总是以这个异常结束

NotSupportedException 未被用户代码处理

无法创建“PreparisCore.BusinessEntities.UserLocation”类型的常量值。在此上下文中仅支持基本类型(“例如 Int32、String 和 Guid”)。

我做错了什么??

最佳答案

给定这段代码:

namespace CollectionsWithIntentions
{
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

internal class Program
{
#region Methods

private static void Main(string[] args)
{
var communications = new[]
{
new Communication { Intention = new Intention { UID = 1 } },
new Communication { Intention = new Intention { UID = 2 } },
new Communication { Intention = new Intention { UID = 3 } },
new Communication { Intention = new Intention { UID = 4 } },
};
var users = new[]
{
new User { UserLocations = new List<UserLocation>(new[] { new UserLocation { LID = 2 },new UserLocation{LID=5} }) },
new User { UserLocations = new List<UserLocation>(new[] { new UserLocation { LID = 3 } }) }
};

IEnumerable<Communication> res =
communications.Where(w => users.Any(a => a.UserLocations.Any(b=>b.LID == w.Intention.UID)));
foreach (Communication communication in res)
{
Trace.WriteLine(communication);
}
}

#endregion
}

internal class Communication
{
#region Public Properties

public Intention Intention { get; set; }

#endregion

#region Public Methods and Operators

public override string ToString()
{
return string.Concat("Communication-> Intention:", this.Intention.UID);
}

#endregion
}

internal class Intention
{
#region Public Properties

public int UID { get; set; }

#endregion
}

internal class User
{
#region Public Properties

public List<UserLocation> UserLocations { get; set; }

#endregion
}

internal class UserLocation
{
#region Public Properties

public int LID { get; set; }

#endregion
}
}

我得到这个结果:

Communication-> Intention:2
Communication-> Intention:3

我错过了什么吗?

关于c# - 使用 LINQ-to-Entities 返回一个对象集合,其中一个对象属性与另一个对象集合中的任何属性匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com