首页 新闻 搜索 专区 学院

linq怎么查询一个字段内多个内容

0
悬赏园豆:100 [已解决问题] 解决于 2020-02-19 13:40

本人是学生,目前在做毕业项目,以往做项目都是用
where a2.ExhibitionID==id 前台传来的值是1,数据库字段存的格式也是1这样的格式,只要判断相同就可以了

但是现在有个需求是数据库字段存的格式是1,2,3这样的格式,前台传来的值还是1这样的,能否用linq判断每一行数据里这一个字段是否还有传来的值,最后还要转成tolist的格式

抱歉本人小白,描述可能不太清楚,希望有了解的前辈能帮下忙。

一叶障月的主页 一叶障月 | 初学一级 | 园豆:6
提问于:2020-02-19 13:07
< >
分享
最佳答案
0
where a2.ExhibitionID.Split(',').Contains(id)
收获园豆:100
RosonJ | 老鸟四级 |园豆:3558 | 2020-02-19 13:11

我直接改的话就报错了,请问是还需要改别的东西吗

用户代码未处理 System.NotSupportedException
HResult=-2146233067
Message=LINQ to Entities 不识别方法“System.String[] Split(Char[])”,因此该方法无法转换为存储表达式。
Source=EntityFramework
StackTrace:
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.ContainsTranslator.TranslateContains(ExpressionConverter parent, Expression sourceExpression, Expression valueExpression) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.ContainsTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SelectTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator1.Translate(ExpressionConverter parent, Expression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()
在 System.Data.Entity.Core.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable1 forMergeOption) 在 System.Data.Entity.Core.Objects.ObjectQuery1.<>c__DisplayClass7.<GetResults>b__6()
在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransactionT
在 System.Data.Entity.Core.Objects.ObjectQuery1.<>c__DisplayClass7.<GetResults>b__5() 在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func1 operation)
在 System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)
在 System.Data.Entity.Core.Objects.ObjectQuery1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0() 在 System.Data.Entity.Internal.LazyEnumerator1.MoveNext()
在 System.Collections.Generic.List1..ctor(IEnumerable1 collection)
在 System.Linq.Enumerable.ToListTSource
在 TradeMent.Service.Method.TradeFairApply.ApplicantList(String TradeFairMessageId, Nullable1 page) 位置 c:\Users\Administrator\Desktop\TradeMent\TradeMent.Service\Method\TradeFairApply.cs:行号 95 在 TradeMent.Areas.BackManage.Controllers.TradeFairApplyController.ApplicantList(String TradeFairMessageId, Nullable1 page) 位置 c:\Users\Administrator\Desktop\TradeMent\TradeMent\Areas\BackManage\Controllers\TradeFairApplyController.cs:行号 39
在 lambda_method(Closure , ControllerBase , Object[] )
在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters)
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
在 System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) 在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.End()
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
InnerException:

一叶障月 | 园豆:6 (初学一级) | 2020-02-19 13:28

@一叶障月:
沒注意到,必須先toList()才行

你的資料源.ToList().Where(a => a.ExhibitionID.Split(',').Contains(id));
RosonJ | 园豆:3558 (老鸟四级) | 2020-02-19 13:36

@RosonJ: 谢谢你的回答,已经改好了

一叶障月 | 园豆:6 (初学一级) | 2020-02-19 13:40
其他回答(2)
0

如果id是单个值可以这样
a2.ExhibitionID.Contains(id)
如果是多个值就像楼上说的那样,不过要先加载到内存查询,相当于把所有数据查询出来然后在内存中过滤,小数据量没问题
也可以动态拼接linq,类似于这样a2.ExhibitionID.Contains(id1)||a2.ExhibitionID.Contains(id2)||a2.ExhibitionID.Contains(id3),如果不会写可以找别人的轮子,有动态生成的linq库

地对地导弹 | 园豆:106 (初学一级) | 2020-02-19 13:15
0

后台存1,2,3 前台 只传 整数?
然后需要判断 有没有相等的数据,然后查询出来?

        string sqldata = "1,2,3,4"; 
        var list2 = sqldata.Split(',').Where(x => x=="1").ToList();
Cgrain | 园豆:1027 (小虾三级) | 2020-02-19 13:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册