1
select ca.Name,l.ListName,ci.EntityId,ci.EntityType,c.FullName from List l

inner join Contact c on c.ContactId = 'D48457AB-C0B5-E211-838F-000C29DFF60A'
inner join CampaignItem ci on ci.EntityId = l.ListId 
inner join Campaign ca on ca.CampaignId = ci.CampaignId
where l.CreatedFromCode = 2
and ci.EntityType = 4300

如何在 Linq 中加入静态 guid?

这是我的 linq 声明。运行此查询时出现异常。如何将静态 Guid 加入我的查询?

var list = (from li in context.ListSet
                        join lm in context.ListMemberSet on li.ListId.Value equals lm.ListId.Id
                        join c in context.ContactSet on lm.EntityId.Id equals on new Guid("D48457AB-C0B5-E211-838F-000C29DFF60A")
                        join ci in context.CampaignItemSet on li.ListId.Value equals ci.EntityId
                        join cam in context.CampaignSet on ci.CampaignId.Id equals cam.CampaignId.Value
                        select new
                        {
                            ListId = li.ListId,
                            ListType = li.Type,
                            MemberType = li.CreatedFromCode,
                            EntityType = lm.EntityType,
                            EntityId = lm.EntityId,
                            ContactNumber = c.trd_CustomerNumber,
                            CampaignRelatedEntity = ci.EntityType,
                            CampaignName = cam.Name == null ? string.Empty : cam.Name,
                            CampaignCode = cam.CodeName == null ? string.Empty : cam.CodeName,
                            Objective = cam.Objective == null ? string.Empty : cam.Objective,
                            CampaignType = cam.TypeCode == null ? string.Empty : ((FinansCrm.BusinessLibrary.Utils.XrmHelper.OptionSetInfo)XrmHelper.GetOption(service, Campaign.EntityLogicalName, "typecode", cam.TypeCode.Value)).Label,
                            BeginDate = cam.ActualStart == null ? string.Empty : cam.ActualStart.Value.ToString(),
                            EndDate = cam.ActualEnd == null ? string.Empty : cam.ActualEnd.Value.ToString(),
                            CampaignId = cam.CampaignId.Value
                        }).ToList()
                           .Where(p => p.ListType.Value.Equals(false) && p.EntityType.Equals(Contact.EntityLogicalName) &&
                                  p.MemberType.Value.Equals(Contact.EntityTypeCode) && p.ContactNumber.Equals(id) &&
                                  p.CampaignRelatedEntity.Equals(List.EntityLogicalName))
                         .ToList();
4

2 回答 2

0

C# 语言中没有 Guid 文字,因此您必须使用Guid.Parse,这适用于我在 LINQ to SQL 中的测试

from l in List
join c in Contact on Guid.Parse("D48457AB-C0B5-E211-838F-000C29DFF60A") equals c.ContactId
join ci in CampaignItem ci on l.ListId equals ci.EntityId
join ca in Campaign on ci.CampaignId equals ca.CampaignId
where l.CreatedFromCode == 2 && ci.EntityType == 4300
select new {ca.Name,l.ListName,ci.EntityId,ci.EntityType,c.FullName}

这是一个幼稚的实现,可能会对此查询进行优化。

作为一项额外的优化,您可以将 Guid 存储到类中的静态只读变量中,但您必须在类型初始化时付出这个代价

private static readonly Guid contactId = Guid.Parse("D48457AB-C0B5-E211-838F-000C29DFF60A");
于 2013-05-22T09:01:58.207 回答
0

目前尚不完全清楚您ContactSet是如何连接到查询中的其他集合的,但您可以通过使用where代替来解决这个问题join

var guid = new Guid("D48457AB-C0B5-E211-838F-000C29DFF60A");

var list = (
  from li in context.ListSet
  join lm in context.ListMemberSet on li.ListId.Value equals lm.ListId.Id
  join ci in context.CampaignItemSet on li.ListId.Value equals ci.EntityId
  join cam in context.CampaignSet on ci.CampaignId.Id equals cam.CampaignId.Value
  let c = context.ContactSet.FirstOrDefault(x => x.ContactId == guid)
  select new
  { ...

这是变相的whereFirstOrDefault(x => x.ContactId == guid)是的缩写Where(x => x.ContactId == guid).FirstOrDefault()

于 2013-05-22T11:19:49.883 回答