无法将参数值从Byte []转换为Byte

时间:2018-04-02 12:12:36

标签: c# linq entity-framework-core

我有一个以下的课程

public partial class ClubMember
{
    public Guid ClubId { get; set; }
    public Guid MemberId { get; set; }
    public byte ClubRoleId { get; set; }
    public bool? IsActive { get; set; }

    public Club Club { get; set; }
    public ClubRole ClubRole { get; set; }
    public UserEntity Member { get; set; }
}

查询时如下

byte[] a = new byte[]{3,4 };
dbContext.ClubMember.Where(cm => a.Contains(cm.ClubRoleId))

这会引发错误,如

  

无法将参数值从字节[]转换为字节。

1 个答案:

答案 0 :(得分:1)

数组有两个Contains重载。一个是Contains(T arg),另一个是Contains(T[] args),你得错了。

您可以尝试使用Any方法。样本:

byte[] a = new byte[]{ 3, 4 };
var result = dbContext.ClubMember.Where(cm => a.Any(b => b == cm.ClubRoleId));

使用Any,实体框架将对您想要的列执行IN过滤器。有些东西,您可以在Any范围内添加另一个可查询实例,并执行子查询。

您也可以使用List而不是数组作为示例:

var a = new List<byte>() { 3, 4 };
var result = dbContext.ClubMember.Where(cm => a.Contains(cm.ClubRoleId));