2

标记对象

  public virtual int TagID { get; set; }
  public virtual string Name { get; set; }
  public virtual string NamePlural { get; set; }

我有一个ICollection<Tag>- 和一个string[]with TagID。如何将Tag对象插入到数组中与'sICollection<Tag>对应的位置?TagIDstring[]

我想在一个 Linq 语句(而不是循环)中执行此操作。

4

3 回答 3

2

这应该够了吧:

public class Program
{
    public static void Main(string[] args)
    {
        List<Tag> tags = new List<Tag>() {new Tag() {TagID = "tag1"}, new Tag() {TagID = "tag4"}, new Tag() {TagID = "tag3"}};
        string[] tagIds = new[] {"tag1", "tag2", "tag3"};

        IEnumerable<Tag> result = tags.Where(tag => tagIds.Contains(tag.TagID));
    }
}

public class Tag
{
    public string TagID { get; set; }
}
于 2013-06-04T10:33:48.607 回答
2

您需要在字符串数组中找到具有匹配 id 的 TagObjects,因此您可以使用Where()and Contains()

ICollection<TagObject> collection;
string[] ids = new[] { "1", "2", "3" };
collection = source.Where(t => ids.Contains(t.TagID.ToString())).ToList();

源中的每个项目TagObject都将使用ids.Contains(t.TagID.ToString())表达式进行评估。如果TagObjectid 与ids数组匹配,则此表达式将返回true,导致TagObject已评估的 包含在 的结果中Where()

编辑

因为它是 Linq to Entities,所以绕过错误的简单方法:

LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式。

会事先将您的 ids 数组转换为整数:

ICollection<TagObject> collection;
string[] ids = new[] { "1", "2", "3" };
int[] convertedIds = ids.Select(id => Convert.ToInt32(id)).ToArray();
collection = source.Where(t => convertedIds.Contains(t.TagID)).ToList();
于 2013-06-04T10:29:40.680 回答
1

这就是你需要的:

string[] tagIds = new string[] {"1",  ...};

ICollection<Tag> result = tagList.Where(tag => tagIds.Contains<string>(tag.TagID.ToString())).ToList();
于 2013-06-04T10:30:57.693 回答