Linq-To-Sql /逗号分隔1列中的Ids /返回逗号分隔1列中的名称

时间:2017-03-13 12:50:29

标签: c# linq linq-to-sql entity-framework-6

我有一个包含多个列的实体,除了1列存储以逗号分隔的ID。

当我将数据返回给客户端时,我需要查询其他一些表以返回Name而不是Id。

我正在使用Linq-To-Sql。该查询对许多其他表执行了Left Outer Joins,但仍然不确定如何将此属性保留为1列但名称而不是ID。

 var query = (
from poc in _manager.All
    // Shelter
    join s in _shelters.GetAll() on poc.Shelter equals s.Id into JoinShelter
    from sh in JoinShelter.DefaultIfEmpty()
select new Dto
        {
            Id = poc.Id,
            PocPresent = poc.PocPresent ? "Yes" : "No",
            Shelter = sh.ShelterName
        }

还有一个名为Languages的属性。它是一个字符串“1,2”,意思是语言1和语言2.

在“poc”上,属性为Languages =“1,2”

现在,我需要将其作为“Lang1,Lang2”返回。

如何使用Lin-To-Sql?

由于

1 个答案:

答案 0 :(得分:0)

您可以在Languages属性上使用投影,并使用Select() LINQ扩展方法。

var query = (
  from poc in _manager.All
  // Shelter
  join s in _shelters.GetAll() on poc.Shelter equals s.Id into JoinShelter
  from sh in JoinShelter.DefaultIfEmpty()
  select new Dto
  {
    Id = poc.Id,
    PocPresent = poc.PocPresent ? "Yes" : "No",
    Shelter = sh.ShelterName,
    Languages = poc.Languages.Split(",".ToCharArray()).Select(l => "Lang"+l)
  })

在此示例中,Languages对象上的Dto属性为IEnumerable<string>。如果您需要使用csv string formati,则可以通过String.Join方法完成。