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();
答案 0 :(得分: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");
答案 1 :(得分: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
{ ...
伪装where
:FirstOrDefault(x => x.ContactId == guid)
是Where(x => x.ContactId == guid).FirstOrDefault()
的缩写。