0

単一の列を持つ1つのvar変数があり、その列をデータベーステーブルと結合したいと思います。私のコードは次のとおりです。

var notlinked = _client.Except(linked).ToList();
var result = (from e in iEnt.clientmasters 
              join g in notlinked on e.ClientID equals g.ClientID 
              select e).ToList();  

現在notlinkedは単一の列を持っており、データベースから情報を取得したいので、次の行でそのテーブルに結合していますが、実行すると次のエラーが発生します:

タイプ'匿名タイプ'の定数値を作成できません。このコンテキストでは、プリミティブ型('Int32、String、Guid'など)のみがサポートされます。

これに対するいくつかの解決策を提案してください

4

4 に答える 4

0

List<int> notlinkedの代わりに使用してくださいvar notlinked。むしろJOINはWHERE句を使用し、チェックには次notlinkedが含まれますe.ClientID

List<int> notlinked = _client.Except(linked).Select(o => o.ClientID).ToList<int>();
var result = (from e in iEnt.clientmasters 
              where notlinked.Contains(e.ClientID)
              select e).ToList(); 
于 2012-09-15T16:02:41.287 に答える
0

Linq to Sqlについてはあまり知りませんが、データベースからの何かとメモリ内のリストである何かとの間で結合を行おうとしているという問題があると思います。次のようなことをする必要があります。

var result = 
    from e in iEnt.clientmasters 
    where notlinked.Contains(e.ClientID)
    select e

この場合、Linq toSqlはSQLIN(...)句を生成できるはずだと思います。まったくテストされていませんが、アイデアは得られます。

編集

より多くの背景については、例えばここを見てください

于 2012-09-14T08:55:29.670 に答える
0

これが物事を見つけるためのサンプルアプリケーションです。私は2つのリストCustomerを取り、もう1つはintリストです。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args) {


            List customers=new List();
            customers.Add(new Customer(1,"Jalpesh"));
            customers.Add(new Customer(2, "Kaushal"));
            customers.Add(new Customer(3, "Mahesh"));

            List intList=new List{1,2};


            var customerList = customers.Where(c => intList.Contains(c.Id));

        }


    }

    public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public Customer(int id,string name) {
            Id = id;
            Name = name;
        }
    }
}


于 2012-09-14T09:33:31.760 に答える
0

結合をスキップして、LINQから独自の出力を書き込むことができます

var notlinked = _client.Except(linked).ToList();
var result = (from e in iEnt.clientmasters 
              from g in notlinked 
              where e.ClientID == g.ClientID 
              select new 
              {
                  Colomn1 = e.firstColomn
                  Colomn2 = g.secondColomn
              }).ToList();  

それは最もエレガントな方法ではありませんが、他のすべてのアイデアが失敗したときにそれを行う傾向があります。

于 2012-09-14T10:57:18.063 に答える